#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
int date;
struct LNode*next;
}LNode,*LinkList;
LinkList H,r,p;
LinkList listA(){
int n;
H=(LinkList)malloc(sizeof(LNode));
H->next=NULL;
r=H;
printf("请输入A表节点数");
scanf("%d",&n);
for ( int i = 0; i < n; i++)
{
p=(LinkList)malloc(sizeof(LNode));
printf("在输入A节点数据");
scanf("%d",&p->date);
r->next=p;
r=p;
}
r->next=NULL;
return H;
}
LinkList z,x,c;
LinkList listB(){
int n;
z=(LinkList)malloc(sizeof(LNode));
z->next=NULL;
x=z;
printf("请输入B表节点数");
scanf("%d",&n);
for ( int i =0; i < n; i++)
{
c=(LinkList)malloc(sizeof(LNode));
printf("在输入B节点数据");
scanf("%d",&c->date);
x->next=c;
x=c;
}
x->next=NULL;
return z;
}
int main()
{
LinkList golistA=listA();
LinkList pa=golistA;
printf("表A的的值为:");
while (pa != NULL)
{
printf("%d ", pa->date);
pa = pa->next;
}
printf("%n");
LinkList golistB=listB();
LinkList pb=golistB;
printf("\n");
printf("\n");
printf("表B的值为:");
while (pb != NULL)
{
printf("%d ", pb->date);
pb = pb->next;
}
struct LNode *j,*k,*m,*n;
j=golistA->date;
golistA->next=NULL;
k=golistB->next;
m=golistA->next;
while (j&&k)
{if (j->date==k->date)
{m->date=j->date;
m->next=NULL;
m=m->next;
j=j->next;
k=k->next;
}
else if (j->date<k->date)
{
j=j->next;
}else k=k->next;
}
free(m);
m=golistA->next;
while (m->next!=NULL)
{if (m->date=m->next->date)
{n=m->next;
m->next=m->next->next;
free(n);
}
else
m=m->next;
free(pa);
pa=golistA;
printf("交集是:");
while (pa != NULL) {
printf("%d ", pa->date);
pa = pa->next;
}
printf("\n");
return 0;
}
return 0;
}
通过前半部分的代码创建了两个链表,想通过后半部分的代码打印出两个链表的交集,但不知道为什么报错了