欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出A与B的交集,并存放于A链表中。

程序员文章站 2024-02-03 16:53:10
...

题目:已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出A与B的交集,并存放于A链表中。

思路:求交集就是求两条链具有的相同元素的结点,A和B链结点一一比较,相同的A保留,B删除结点,不相同结点,由于是递增链,小的元素已经没有再比较的必要了,删去,当其中一条链走到结尾时,比较就结束了,只需把没有走到尾的链剩余结点清除即可。

void MergeList(Linklist& L1, Linklist& L2)
{//都是带头结点的链表,L1为A链,L2为B链
	Linklist L3, p1, p2, p3, q;
	p1 = L1->next;
	p2 = L2->next;
	L3 = L1;//使用第一条链的头结点
	p3 = L3;
	while (p1 && p2)//只要一条链到尾就跳出
	{
		if (p1->elem = p2->elem)//相等保留
		{
			p3->next = p1;
			p3 = p1;
			p1 = p1->next;
			q = p2;//第二条链删除一个节点
			p2 = p2->next;
			delete q;
		}
		//不管那条链,小的元素对应节点删掉
		else if (p1->elem < p2->elem)
		{
			q = p1;
			p1 = p1->next;
			delete q;
		}
		else
		{
			q = p2;
			p2 = p2->next;
			delete q;
		}
	}
	//把剩余的节点清空
	while (p1)
	{
		q = p1;
		p1 = p1->next;
		delete q;
	}
	while (p2)
	{
		q = p2;
		p2 = p2->next;
		delete q;
	}
	p3->next = NULL;//把新链尾巴置NULL,一定要有,不然在其他操作中报错
}

初学数据结构,把自己做的一些题目记录下来。