//求两个有序单链表的交集
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct slist
{
int data;
struct slist *next;
}list;
void creatlist(list *&l);
void printlist(list *&l);
void intersection(list *l1,list *l2,list *&l3);
int main(void)
{
list *l1,*l2,*l3;
creatlist(l1);
creatlist(l2);//C++传引用的方式地址没变
intersection(l1,l2,l3);
printlist(l3);
return 0;
}
void intersection(list *l1,list *l2,list *&l3)
{
list *p = l1->next ,*q = l2->next ,*r,*s;
l3 = (list *)malloc(sizeof(list));
l3->next ;
r = l3;
while(p != NULL && q != NULL)
{
if(p->data == q->data )
{
s = (list *)malloc(sizeof(list));
s->data = p->data ;
r->next = s;
r = s;
p = p->next ;
q = q->next ;
}
else if(p->data < q->data )
{
p = p->next ;
}
else
{
q = q->next ;
}
}
r->next = NULL;
}
void creatlist(list *&l)
{
l = (list *)malloc(sizeof(list));
l->next = NULL;
list *r,*s;
r = l;
int x;
cin>>x;
while(x != 0)
{
s = (list *)malloc(sizeof(list));
s->data = x;
r->next = s;
r = s;
cin>>x;
}
r->next = NULL;
}
void printlist(list *&l)
{
if(l->next == NULL)
{
printf("该链表无元素:");
}
else
{
list *p = l->next ;
while(p != NULL)
{
printf("%d ",p->data );
p= p->next ;
}
}
printf("\n");
}
转载:https://blog.csdn.net/qq_44653420/article/details/102096204
查看评论