c++俩个有序链表序列的合并
时间: 2024-10-14 22:18:39 浏览: 32
在C++中,合并两个有序链表通常是通过遍历两个链表并比较节点值来进行的。下面是一个基本步骤的描述:
1. 创建一个新的头节点,用于存放合并后的链表。
2. 初始化三个指针:`p1` 指向第一个列表的头节点,`p2` 指向第二个列表的头节点,以及 `newHead` 指向新链表的头节点(初始时指向 `NULL`)。
3. 当 `p1` 和 `p2` 都非 `NULL` 时,比较它们的值。如果 `p1` 的值小于 `p2` 的值,将 `p1` 的下一个节点赋给 `newHead`,然后移动 `p1` 到下一个节点;反之,如果 `p2` 的值较小,则将 `p2` 的下一个节点赋给 `newHead`,移动 `p2`。
4. 如果其中一个指针到达了 `NULL`,那么将另一个剩余的指针所指向的链表接到 `newHead` 后面。
5. 继续这个过程,直到合并完成。
以下是合并操作的伪代码示例:
```cpp
struct ListNode {
int val;
ListNode* next;
};
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* newHead = NULL; // 新链表头指针
ListNode* current = newHead; // 当前节点
while (l1 != NULL && l2 != NULL) {
if (l1->val < l2->val) {
current->next = l1;
l1 = l1->next;
} else {
current->next = l2;
l2 = l2->next;
}
current = current->next;
}
// 将未遍历完的链表连接到已排序部分的末尾
if (l1 != NULL)
current->next = l1;
else
current->next = l2;
return newHead;
}
```
阅读全文