user-0 提问: 各位朋友能不能进来帮忙看一下我的这个程序哪里有问题？

回复:
user: user-1
content: 格式以下： LinkList In_LinkList(LinkList A,LinkList B) {   LinkList C;   LNode *p,*q,*m,*r,*s;   C = (LinkList)malloc(sizeof(LNode));   C->next = NULL;   m = C;   s = p = A->next;   r = q = B->next;       while(s && r ){        q = r; //找到相同数据,B链表从相同数据后,开始查找            //否则从头查找         while(p && q){        if(p->data == q->data)       {          //m->next = p; //这是错误的，求交集不会破坏源链表，所以要创建新节点。            m->next = (LinkList)malloc(sizeof(LNode));//创建新节点。            m->next->data = p->data;//复制数据。            m = m->next;            //新节点作为当前节点。            m->next = NULL;         //新节点是尾节点，所以 next 为 NULL。            p = p->next;            r = q = q->next;       //找到相同数据,B链表从此后开始查找                          }       else         q = q->next;       }      //p = p->next; 这里有点问题，修改如下：       if(s == p)           p = s = s->next;//没有找到相同数据，更新A 链表的下一个节点。      else s = p; //已经找到若干节点数据相同，节点已经更新，直接用p作为，A 链表的下一个节点。      }   return C; }

user: user-1
content: LinkList In_LinkList(LinkList A,LinkList B) {   LinkList C;   LNode *p,*q,*m,*r,*s;   C = (LinkList)malloc(sizeof(LNode));   C->next = NULL;   m = C;   s = p = A->next;   r = q = B->next;       while(s && r ){        q = r; //找到相同数据,B链表从相同数据后,开始查找            //否则从头查找         while(p && q){        if(p->data == q->data)       {          //m->next = p; //这是错误的，求交集不会破坏源链表，所以要创建新节点。            m->next = (LinkList)malloc(sizeof(LNode));//创建新节点。            m->next->data = p->data;//复制数据。            m = m->next;            //新节点作为当前节点。            m->next = NULL;         //新节点是尾节点，所以 next 为 NULL。            p = p->next;            r = q = q->next;       //找到相同数据,B链表从此后开始查找                          }       else         q = q->next;       }      //p = p->next; 这里有点问题，修改如下：       if(s == p)           p = s = s->next;//没有找到相同数据，更新A 链表的下一个节点。      else s = p; //已经找到若干节点数据相同，节点已经更新，直接用p作为，A 链表的下一个节点。      }   return C; }

user: user-1
content: LinkList In_LinkList(LinkList A,LinkList B) 这个函数写的有问题  LinkList In_LinkList(LinkList A,LinkList B) {   LinkList C;   LNode *p,*q,*m,*r;   C = (LinkList)malloc(sizeof(LNode));   C->next = NULL;   m = C;   p = A->next;   r = q = B->next;      while(p && r ){        q = r;     while(p && q){        if(p->data == q->data)       {          //m->next = p; //这是错误的，求交集不会破坏源链表，所以要创建新节点。            m->next = (LinkList)malloc(sizeof(LNode));//创建新节点。            m->next->data = p->data;//复制数据。            m = m->next;            //新节点作为当前节点。            m->next = NULL;         //新节点是尾节点，所以 next 为 NULL。            p = p->next;            q = q->next;            r = q;        }       else         q = q->next;       }      p = p->next;    }   return C; }  PS :    你可能没有理顺，求交集的逻辑，所以代码得不到，你想要的结果。

user: user-0
content: 我懂了，谢谢楼上大神。。

user: user-0
content: 试了各种方法，楼上大神们说的我也调过了，但是结果还是没有出来。。C就是显示不了

user: user-2
content: void main()  {    LinkList A = NULL;   LinkList B = NULL;   LinkList C = NULL;  //这里直接置空就好了，    //2楼说的不行吧，不能malloc，因为你后面会返回malloc的地址，这里malloc的话导致内存泄露的！

user: user-3
content: ++  引用 2 楼 N_sev7 的回复: #include<stdio.h> #include<stdlib.h> #include<malloc.h> #define NULL 0  typedef struct node {   int data;   struct node *next; }LNode,*LinkList;  LinkList create_LinkList() {   int x;   LinkList L;   LNode *r;   L=(LinkList)malloc(sizeof(LNode));   L->next=NULL;   r=L;   printf("input the value x:\n");   scanf("%d",&x);   while(x)   {     r->next=(LNode *)malloc(sizeof(LNode));     r->next->data=x;     r=r->next;     scanf("%d",&x);   }   r->next=NULL;   return L; }  LinkList In_LinkList(LinkList A,LinkList B) {   LinkList C;   LNode *p,*q,*m;   C=(LinkList)malloc(sizeof(LNode));   C->next=NULL;   m=C;   p=A->next;   q=B->next;   while(p&&q)   {     if(p->data==q->data)     {       m->next=p;       m=p;       m->next=NULL;       p=p->next;       q=q->next;     }     else       q=q->next;    }   return C; }  void Print_LinkList(LinkList p) {   LNode *q=p->next;   while(q)   {     printf("%3d",q->data);     q=q->next;   }   printf("\n"); }  void main() {   LinkList A,B,C;   //这里你定义了C  C的类型是指针  但是你都没有给他申请空间   C->next=NULL;     ///而这里你就直接开始用next了 C都没有空间你怎么给next赋值  显然不行的    //C =  (LinkList)malloc(sizeof(LNode));   ////加上这句     A=create_LinkList();   B=create_LinkList();   C=In_LinkList(A,B);   printf("A: ");   Print_LinkList(A);   printf("\nB: ");   Print_LinkList(B);   printf("\nC: ");   Print_LinkList(C);   getch(); }

user: user-4
content: #include<stdio.h> #include<stdlib.h> #include<malloc.h> #define NULL 0  typedef struct node {   int data;   struct node *next; }LNode,*LinkList;  LinkList create_LinkList() {   int x;   LinkList L;   LNode *r;   L=(LinkList)malloc(sizeof(LNode));   L->next=NULL;   r=L;   printf("input the value x:\n");   scanf("%d",&x);   while(x)   {     r->next=(LNode *)malloc(sizeof(LNode));     r->next->data=x;     r=r->next;     scanf("%d",&x);   }   r->next=NULL;   return L; }  LinkList In_LinkList(LinkList A,LinkList B) {   LinkList C;   LNode *p,*q,*m;   C=(LinkList)malloc(sizeof(LNode));   C->next=NULL;   m=C;   p=A->next;   q=B->next;   while(p&&q)   {     if(p->data==q->data)     {       m->next=p;       m=p;       m->next=NULL;       p=p->next;       q=q->next;     }     else       q=q->next;    }   return C; }  void Print_LinkList(LinkList p) {   LNode *q=p->next;   while(q)   {     printf("%3d",q->data);     q=q->next;   }   printf("\n"); }  void main() {   LinkList A,B,C;   //这里你定义了C  C的类型是指针  但是你都没有给他申请空间   C->next=NULL;     ///而这里你就直接开始用next了 C都没有空间你怎么给next赋值  显然不行的    //C =  (LinkList)malloc(sizeof(LNode));   ////加上这句     A=create_LinkList();   B=create_LinkList();   C=In_LinkList(A,B);   printf("A: ");   Print_LinkList(A);   printf("\nB: ");   Print_LinkList(B);   printf("\nC: ");   Print_LinkList(C);   getch(); }

user: user-5
content: 这种问题，要自己学会设置断点，逐步调试，看哪里出了问题，这是程序员必须会的