其中引用参数 La、Lb是待合并的带头结点的有序链表,引用参数Lc是待返回的结果链表。链表的头指针为head,结点指针域为next,数据域为data。
时间: 2024-02-03 14:12:29 浏览: 19
下面是一个简单的实现代码,其中假设链表中的数据域为 int 类型,且链表中的元素已经按照升序排列:
```cpp
void mergeList(ListNode* La, ListNode* Lb, ListNode*& Lc) {
// 链表 La 或 Lb 为空,直接将另一个链表赋值给 Lc
if (!La) {
Lc = Lb;
return;
}
if (!Lb) {
Lc = La;
return;
}
// 选择较小的结点赋值给 Lc
if (La->data <= Lb->data) {
Lc = La;
Lc->next = NULL;
La = La->next;
} else {
Lc = Lb;
Lc->next = NULL;
Lb = Lb->next;
}
ListNode* p = Lc;
// 合并剩余结点
while (La && Lb) {
if (La->data <= Lb->data) {
p->next = La;
p = La;
La = La->next;
} else {
p->next = Lb;
p = Lb;
Lb = Lb->next;
}
}
// 将剩余结点赋值给 Lc
if (La) {
p->next = La;
} else {
p->next = Lb;
}
}
```
需要特别注意的是,由于合并后的链表 Lc 是通过改变原链表 La 和 Lb 的结点指针域实现的,因此需要使用引用参数 ListNode*& Lc。而在函数内部,我们需要使用指针 p 指向 Lc 的最后一个结点,用于连接剩余的结点。