基于链表的两个递增有序序列的合并
时间: 2023-11-13 07:11:23 浏览: 131
hebing.rar_线性表
这是一个经典的算法问题,可以使用双指针来解决。具体步骤如下:
1. 定义一个新的链表,作为合并后的有序序列。
2. 定义两个指针,分别指向两个有序链表的头节点。
3. 比较两个指针所指节点的大小,将较小的节点添加到新链表中,并将指针向后移动一位。
4. 重复上述步骤,直到其中一个链表遍历完毕。
5. 将另一个链表中剩余的节点添加到新链表的末尾。
下面是 C++ 的示例代码:
```cpp
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* dummy = new ListNode(0); // 定义一个虚拟头节点
ListNode* cur = dummy; // 定义指针 cur 指向新链表的尾节点
while (l1 && l2) {
if (l1->val <= l2->val) {
cur->next = l1; // 将 l1 的头节点加入新链表
l1 = l1->next; // l1 指针向后移动一位
} else {
cur->next = l2; // 将 l2 的头节点加入新链表
l2 = l2->next; // l2 指针向后移动一位
}
cur = cur->next; // cur 指针向后移动一位
}
// 将剩余的节点添加到新链表的末尾
if (l1) cur->next = l1;
if (l2) cur->next = l2;
return dummy->next; // 返回新链表的头节点
}
```
阅读全文