链表的使用,c语言

目的:掌握链表的使用。

内容:求C=A-B。其中A为m个元素、B为n个元素的集合,其元素都为整数,且都递增有序,每个集合中元素互异。构造结果C亦递增有序。
要求:现要求A,B,C采用链表进行存储,且算法有较高的时间效率。

#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
 int data;
 struct Node*next;
}node,*Llist;
Llist creat(int n)
{
 int i;
 Llist head,p,q;
    head=(node*)malloc(sizeof(node));
 p=q=head;
 head->next=NULL;
 for(i=0;i<n;i++)
 {
  p=(node*)malloc(sizeof(node));
  scanf("%d",&p->data);
  p->next=q->next;
  q->next=p;
  q=p;
 }
 return head;
}//建立链表函数//
int main()
{
 Llist la,lb,lc;
 node *p,*q,*r;
 int m,n;
 printf("请分别输入A与B链表的长度:");
 scanf("%d%d",&m,&n);
 printf("请输入A链表的数据(递增):");
 la=creat(m);
    printf("请输入B链表的数据(递增):");
 lb=creat(n);
 q=la;
 p=la->next;
 r=lb->next;
 while(p!=NULL&&r!=NULL)
 {
  if((p->data)==(r->data))
  {
   q->next=p->next;
   free(p);
   p=q->next;
   r=r->next;
  }//当两值相等时均向后移动一位,并释放A中相等结点//
  else if((p->data)<(r->data))
  {
   q=p;
   p=p->next;
  }//a链表中结点小于b时,a向后移动一位//
  else
   r=r->next;//b链表中结点小于a时,b向后移动一位//
 }
 lc=la;
 p=lc->next;
 printf("A-B的结果为:");
 while(p!=NULL)
 {
  printf("%d ",p->data);
  p=p->next;
 }
 return 0;
}

追问

不行啊,运行不了

温馨提示:答案为网友推荐,仅供参考
相似回答