【问题描述】
将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其他的存储空间。表中不允许有重复的数据。
【参考代码】
typedef struct LNode
{
int data;
struct LNode * next;
}LNode, * LinkList;
void MergeList(LinkList &La, LinkList &Lb, LinkList &Lc)
{
LinkList pa = La->next;
LinkList pb = Lb->next;
Lc = La;
LinkList pc = Lc;
while (pa && pb)
{
if (pa->data > pb->next)
{
pc->next = pb;
pc = pb;
pb = pb->next;
}
if (pa->data < pb->next)
{
pc->next = pa;
pc = pa;
pa = pa->next;
}
else
{
pc->next = pa;
pc = pa;
pa = pa->next;
pb = pb->next;
delete pb;
}
}
pc->next = pa ? pa : pb;
delete Lb;
}
【代码讲解】
本代码是针对考研数据结构题目设计,所以采用伪代码,主要理解算法运行逻辑,代码还是比较简单的,注意最后释放节点。