假设有两个按元素值递增次序排列的带头结点的线性表LA,LB,均以单链表形式存储。编写算法将这两个单链表归并为一个按元素值递增次序排列的单链表LC中
时间: 2024-05-07 16:21:08 浏览: 110
可以使用归并排序的思想,将LA和LB分别排序,然后再将它们归并成一个有序的单链表LC。
具体实现如下:
1. 定义三个指针pa、pb、pc,分别指向LA、LB、LC的头结点;
2. 如果pa所指结点的值小于等于pb所指结点的值,则将pa所指结点插入LC的末尾,并将pa指向下一个结点;否则将pb所指结点插入LC的末尾,并将pb指向下一个结点;
3. 当LA或LB中任意一个链表遍历完毕后,将另一个链表中剩余的结点依次插入LC的末尾;
4. 返回LC的头结点。
代码实现如下:
```c++
ListNode* merge(ListNode* LA, ListNode* LB) {
ListNode* pa = LA->next;
ListNode* pb = LB->next;
ListNode* pc = new ListNode(0); // LC的头结点
ListNode* tail = pc; // LC的尾结点,初始值为头结点
while (pa && pb) {
if (pa->val <= pb->val) {
tail->next = pa;
pa = pa->next;
} else {
tail->next = pb;
pb = pb->next;
}
tail = tail->next;
}
if (pa) tail->next = pa;
if (pb) tail->next = pb;
return pc;
}
```
时间复杂度为O(m+n),其中m和n分别为LA和LB的长度。
阅读全文