如何用C++实现将两个已排序的单链表合并成一个新的已排序单链表?
时间: 2024-11-22 18:35:01 浏览: 1
在C++中,合并两个已排序的单链表可以采用迭代或递归的方式实现。这里提供一种基于迭代的解决方案:
1. 首先,创建一个新节点作为结果链表的头节点,并初始化为null。
2. 定义两个指针,分别指向第一个链表的头节点和第二个链表的头节点,以及一个新的临时变量,用于存放当前比较的较小值。
3. 当两个链表的头节点都不为空时,进行循环:
a. 比较两个节点的值,选择较小的一个,将其添加到结果链表的新节点,并将新节点指向的节点更新为该较小值对应的下一个节点。
b. 如果其中一个链表的头节点变为null,则将另一个链表剩余部分添加到结果链表。
4. 最后,如果第一个链表还有剩余未处理的部分,将其添加到结果链表;如果没有,直接返回结果链表的头节点。
以下是伪代码示例:
```cpp
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* mergeTwoSortedLists(ListNode* l1, ListNode* l2) {
ListNode* result = new ListNode(0);
ListNode* current = result;
while (l1 != nullptr && l2 != nullptr) {
if (l1->val < l2->val) {
current->next = l1;
l1 = l1->next;
} else {
current->next = l2;
l2 = l2->next;
}
current = current->next;
}
// 将剩余链表连接到结果链表
if (l1 != nullptr) {
current->next = l1;
} else {
current->next = l2;
}
return result->next;
}
```
阅读全文