user-0 提问: 求大佬们帮忙看一下哪里有错

回复:
user: user-0
content: 原来如此，卡了我2个多小时真是快要死了，多谢指点！

user: user-1
content: #include<stdio.h> #include <stdlib.h> //#include<malloc.h>  typedef int ElemType;  typedef struct LNode {     ElemType data;     struct LNode *next; }LinkNode; //定义单链表  void CreateListF(LinkNode *&L,ElemType a[],int n) //建立单链表 {     LinkNode *s;     L=(LinkNode *)malloc(sizeof(LinkNode));     L->next=NULL;      for(int i=0;i<n;i++)     {         s=(LinkNode *)malloc(sizeof(LinkNode));         s->data=a[i];         s->next=L->next;         L->next=s;     } }  void InitList(LinkNode *&L) //初始化 {     L=(LinkNode *)malloc(sizeof(LinkNode));     L->next=NULL; }  void DestroyList(LinkNode *&L) //销毁 {     LinkNode *pre=L,*p=L->next;     while(p)     {         free(pre);         pre=p;         p=pre->next;     }     free(pre); }  void DispList(LinkNode *L) //输出 {     LinkNode *p=L->next;     while(p)     {         printf("%d",p->data);         p=p->next;     }     printf("\n"); }  int LocateElem(LinkNode *L, ElemType e) //按元素查找 {     int i = 1;     LinkNode *p = L->next;     while(p && p->data != e)     {         p = p->next;         i++;     }     if(!p)         return(0);     else         return(i); }  bool ListInsert(LinkNode *&L,int i, ElemType e) //插入数据元素 {     int j=0;     LinkNode *p = L, *s;     if(i <= 0)         return false;     while(j < i - 1 && p) {         j++;    /* 改成j++*/         p = p->next;     }     if(!p)         return false;     else     {         s = (LinkNode *)malloc(sizeof(LinkNode));         s->data = e;         s->next = p->next;         p->next = s;         return true;     } }  void sort(LinkNode *&L) //排序 {     LinkNode *p,*pre,*q;     p=L->next->next;     L->next->next=NULL;     while(p!=NULL)     {         q=p->next;         pre=L;         while(pre->next!=NULL && pre->next->data<p->data)             pre=pre->next;         p->next=pre->next;         pre->next=p;         p = q;     } }  void Bing(LinkNode *a,LinkNode *b,LinkNode *&c) //并 {     InitList(c);     LinkNode *p=a->next;     LinkNode *q=b->next;     int i=0;     while(p && q)     {         if(p->data < q->data)         {             ListInsert(c,i+1,p->data);             p=p->next;             i++;         }         else if(p->data==q->data)         {             ListInsert(c,i+1,p->data);             p=p->next;             q=q->next;             i++;         }         else         {             ListInsert(c,i+1,q->data);             q=q->next;             i++;         }     }     while (q) {         ListInsert(c, i+1, q->data);         q=q->next;         i++;     }     while (p) {         ListInsert(c, i+1, q->data);         p = p->next;         i++;     } }  void Jiao(LinkNode *a,LinkNode *b,LinkNode *&c) //交 {     DestroyList(c);     InitList(c);     LinkNode *p=a->next;     int i=0;     while(p)     {         if(LocateElem(b,p->data))             ListInsert(c,++i,p->data);         p = p->next;     } }  void  Cha(LinkNode *a,LinkNode *b,LinkNode *&c) //差 c前少个& {     DestroyList(c);     InitList(c);     LinkNode *p = a->next;     int i = 0;     while(p)     {         if(LocateElem(b, p->data) == 0) {             ListInsert(c, ++i, p->data);             //printf("%d\n", p->data);         }         p = p->next;     }  }  int main(void) {     LinkNode *ha,*hb,*hc;     ElemType a[4] = {2,4,1,3};     ElemType b[4] = {3,1,5,6};     CreateListF(ha,a,4);     CreateListF(hb,b,4);     printf("原ha表:    ");     DispList(ha);     printf("原hb表:    ");     DispList(hb);     sort(ha);     sort(hb);     printf("排序后ha表:    ");     DispList(ha);     printf("排序后hb表:    ");     DispList(hb);     printf("并:   ");     Bing(ha,hb,hc);     DispList(hc);     printf("交:   ");     Jiao(ha,hb,hc);     DispList(hc);     printf("差:   ");     Cha(ha,hb,hc);     DispList(hc); }  两个地方改一下就好了； 第一处：插入一个节点的地方，将i++改成j++; 第二处：求差集时，需要将形参c前加上&. 以上两处都有注释； 另外，对你的代码做了部分风格修改，建议对比你的代码看一下