c++有序链表的合并
时间: 2024-10-11 10:06:42 浏览: 26
c++ 如何合并两个有序链表
在C++中,合并两个已排序的链表可以使用迭代或递归的方式来实现。这里是一个简单的迭代算法示例:
```cpp
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (!l1) return l2; // 如果l1为空,返回l2
if (!l2) return l1; // 如果l2为空,返回l1
// 创建一个新的头节点,并设置初始指针指向最小值所在的节点
ListNode* dummy = new ListNode(0);
ListNode* tail = dummy;
while (l1 && l2) {
if (l1->val < l2->val) {
tail->next = l1;
l1 = l1->next;
} else {
tail->next = l2;
l2 = l2->next;
}
tail = tail->next;
}
// 将剩余链表连接到结果链表末尾
if (l1) tail->next = l1;
if (l2) tail->next = l2;
return dummy->next; // 返回合并后的实际链表头节点
}
```
在这个例子中,我们创建了一个虚拟头节点`dummy`,并使用`tail`来跟踪正在合并的位置。当遍历完其中一个列表时,我们将未遍历完的那个列表添加到`tail`的`next`。
阅读全文