小言_互联网的博客

求两个有序单链表的交集

349人阅读  评论(0)
//求两个有序单链表的交集
#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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场