编写将两个带头结点的递增有序单链表L1和L2合并为一个非递减的有序单链表L1的算法 Merge(Li nkList &L1, LinkList &L2),
时间: 2024-09-25 10:02:42 浏览: 56
探讨:将两个链表非降序合并为一个链表并依然有序的实现方法
要编写一个合并两个递增有序链表 `L1` 和 `L2` 的算法,可以采用迭代或者递归的方式。这里我们提供一种迭代的解决方案:
```python
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* mergeTwoLists(ListNode* L1, ListNode* L2) {
// 创建一个新的头节点作为结果链表
ListNode* head = new ListNode(0);
ListNode* tail = head;
while (L1 != NULL && L2 != NULL) {
// 如果 L1 的值小于 L2 的值,将 L1 的元素添加到结果链表
if (L1->val <= L2->val) {
tail->next = L1;
L1 = L1->next;
} else {
// 否则,将 L2 的元素添加到结果链表
tail->next = L2;
L2 = L2->next;
}
// 移动 tail 指针以便继续比较下一个节点
tail = tail->next;
}
// 如果其中一个链表还有剩余元素,直接将其添加到结果链表尾部
if (L1 != NULL) {
tail->next = L1;
} else {
tail->next = L2;
}
return head->next; // 返回合并后的链表头节点
}
```
在这个算法中,我们不断比较 `L1` 和 `L2` 的当前节点值,将较小的节点添加到新链表中,并更新指针。当有一个链表遍历完后,我们将另一个链表剩下的部分添加到结果链表的尾部。
阅读全文