赶快来找岔。求两个带头结点的单链表的交集
#include<stdio.h>
#include<stdlib.h>
typedef int datatype;
typedef struct node{
datatype data;
struct node *next;
}linknode;
typedef linknode *linklist;
linklist creat(void)
{
linklist r,head,s;
int x;
head=r=(linklist)malloc(sizeof(linknode));/*一开始,head和r都指向头结点*/
head->next=NULL;
scanf("%d",&x);
while(x)
{
s=(linklist)malloc(sizeof(linknode));
s->data=x;/*将x值赋予s*/
r->next=s;
r=s;/*r始终指向最后一个结点*/
scanf("%d",&x);
}
r->next=NULL;
return head;
}
void print(linklist head)
{
linklist p;
p=head->next;
printf("list is:\n");
while(p)
{
printf("%4d",p->data);
p=p->next;
}
printf("\n");
}
void inter(linklist a,linklist b,linklist c)/*求两个单链表的交集*/
{
linklist s,t,p,q;
p=(linklist)malloc(sizeof(linknode));
p=c->next;
q=s=a->next;
t=b->next;
if(s!=NULL)
{
while(s->next)
{
q=q->next;
while(t && s->data!=t->data)
t=t->next;
p->data=s->data;
p=p->next;
p=(linklist)malloc(sizeof(linknode));
s=q;
}
}
}
void main()
{
linklist x,y,z;
z=(linklist)malloc(sizeof(linknode));
z->next=NULL;
x=creat();
print(x);
y=creat();
print(y);
inter(x,y,z);
print(z);
getch();
}