C/C++合并两个升序链表

算法的思想

1.需要合并的两个链表La,Lb,合并之后的链表Lc(用La的头节点)。
2.定义两个辅助指针Pa,Pb分别是链表La,Lb的复制指针。
3.从首元节点开始比较,当两个链表都没有到达链表尾部的时候,依次取其中较小的数据进行链接到Lc的最后
4.如果两个元素的值相同,取La链的,把Lb链表的元素删除(确保新链表没有重复的元素)
5.当一个链表结束的时候,把非空链表剩余的所有元素链接在Lc表的最后
6.释放Lb的头节点(Lb链表就被删除了)

代码实现+注释

void MergeList(LinkList &La, LinkList &Lb, LinkList &Lc)
{
    
    
	LinkList pa, pb, pc;
	pa = La->next;
	pb = Lb->next;
	Lc = pc = La;
	while (pa && pb)
	{
    
    
		if (pa->data < pb->data)
		{
    
     //把小的数据(pa)链接到Lc表上
			pc->next = pa;
			pc = pa;	   //保证指向最后的节点上
			pa = pa->next; //指针后移
		}
		else if (pa->data > pb->data)
		{
    
     //把小的数据(pb)链接到Lc表上
			pc->next = pb;
			pc = pb;
			pb = pb->next;
		}
		else
		{
    
     //如果两个元素的值相同,取La链的,把Lb链表的元素删

			pc->next = pa;
			pc = pa;
			pa = pa->next;
			LNode *p = pb->next; //保存pb下一个节点
			delete (pb);
			pb = p;
		}
	}
	pc->next = pa?pa:pb;
	delete(Lb);
}

猜你喜欢

转载自blog.csdn.net/qq_43216714/article/details/123648122