求两个链表的交集的代码,请问哪里出错了

img


我试着创建第三个链表,将两个链表中相等的数放入该链表中并且输出,但是得不到输出结果
这是我的整段代码
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
}Node,Linklist;
void Initlist(Linklist &L)//初始化链表
{
L=(Node
)malloc(sizeof(Node));
L->next=NULL;
}
void tail_insert(Linklist &L)//尾插法建立链表
{
int i,j;
printf("输入要创建的链表的长度:");
scanf("%d",&i);
Node *r,*s;
r=L;
for(j=1;j<=i;j++)
{
s=(Node *)malloc(sizeof(Node));
scanf("%d",&s->data);
r->next=s;
r=s;
}
r->next=NULL;
}
void showlist(Linklist &L)//将链表输出
{
Node *p;
p=L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
int length(Linklist &L)//求其长度
{
Node *p;
p=L->next;
int length=0;
while(p!=NULL)
{
length++;
p=p->next;
}
return length;
}
void intersection(Linklist &LA,Linklist &LB)
{
Node *s,*p,*r;
Linklist LC;
Initlist(LC);
p=LB->next;
r=LC;
while(p!=NULL)
{
s=LA->next;
while(s!=NULL)
{
if(s->data==p->data)
{
Node *m=(Node *)malloc(sizeof(Node));
m->data=s->data;
r->next=m;
r=m;
}
else
s=s->next;
}
p=p->next;
}
r->next=NULL;
showlist(LC);
}
int main()
{
int m,n;
Linklist LA,LB;
Initlist(LA);
Initlist(LB);
tail_insert(LA);
tail_insert(LB);
showlist(LA);
printf("\n");
showlist(LB);
m=length(LA);
n=length(LB);
printf("\n");
printf("%d\n%d",m,n);
intersection(LA,LB);
}

修改处见注释,供参考:

#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
    int    data;
    struct LNode *next;
}Node,*Linklist;
void Initlist(Linklist &L)//初始化链表
{
    L=(Node*)malloc(sizeof(Node));
    L->next=NULL;
}
void tail_insert(Linklist &L)//尾插法建立链表
{
    int i,j;
    printf("输入要创建的链表的长度:");
    scanf("%d",&i);
    Node *r,*s;
    r=L;
    for(j=1;j<=i;j++)
    {
       s=(Node *)malloc(sizeof(Node));
       scanf("%d",&s->data);
       r->next=s;
       r=s;
    }
    r->next=NULL;
}
void showlist(Linklist &L)//将链表输出
{
    Node *p;
    p=L->next;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
}
int length(Linklist &L)//求其长度
{
    Node *p;
    p=L->next;
    int length=0;
    while(p!=NULL)
    {
        length++;
        p=p->next;
    }
    return length;
}
Linklist intersection(Linklist &LA,Linklist &LB)//修改
//void intersection(Linklist &LA,Linklist &LB)
{
    Node *s,*p,*r;
    Linklist LC;
    Initlist(LC);
    p=LB->next;
    r=LC;
    while(p!=NULL)
    {
         s=LA->next;
         while(s!=NULL)
         {
              if(s->data==p->data)
              {
                  Node *m=(Node *)malloc(sizeof(Node));
                  m->data=s->data;
                  r->next=m;
                  r=m;
                  break;  //修改
              }
              //else 修改
              s=s->next;
         }
         p=p->next;
    }
    r->next=NULL;
    return LC;  //showlist(LC); 修改
}
int main()
{
    int m,n;
    Linklist LA,LB,LC;//修改
    Initlist(LA);
    Initlist(LB);
    tail_insert(LA);
    tail_insert(LB);
    showlist(LA);
    printf("\n");
    showlist(LB);
    m=length(LA);
    n=length(LB);
    printf("\n");
    printf("%d\n%d\n",m,n);
    showlist(LC=intersection(LA,LB));//修改

    return 0;
}