习题2.1

将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其他的存储空间。表中不允许有重复的数据。

void MergeList(LinkList &La, LinkList &Lb, LinkList &Lc)
{//将两个递增的有序链表La,Lb合并为一个递增的有序链表Lc
	LinkList pa, pb, pc,q;
	pa = La->next;			//pa是链表La的工作指针,初始化为首元结点
	pb = La->next;			//pb是链表Lb的工作指针,初始化为首元结点
	Lc = pc = La;			//用La的头结点作为Lc的头结点
	while (pa&&pb)			//两个链表La,Lb均为到达表尾结点
	{
		if (pa->data < pb->data)
		{//谁小谁先进Lc
			pc->next = pa;
			pc = pa;
			pa = pa->next;
		}
		else if (pa->data > pb->data)
		{
			pc->next = pb;
			pc = pb;
			pb = pb->next;
		}
		else
		{//相等时去=取La的元素,删除Lb的元素
			pc->next = pa;
			pc = pa;
			pa = pa->next;
			q = pb->next;
			delete pb;
			pb = q;
		}
	}
	pc->next = pa ? pa:pb;
	delete Lb;
}

完整程序测试:

 

版权声明:
作者:maple
链接:https://www.maplezeroz.com/?p=247
来源:我的学习笔记
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
习题2.1
将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其他的存储空间。表中不允许有重复的数据。 void Merg……
<<上一篇
下一篇>>