两个链表合并,都有序C++
时间: 2024-10-25 11:17:34 浏览: 7
c++ 如何合并两个有序链表
当你需要合并两个已排序的链表(例如它们都是升序排列)并得到一个新的有序链表时,可以使用归并排序的思想。下面是一个简单的C++函数示例,用于合并两个有序链表:
```cpp
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* mergeTwoSortedLists(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;
}
// 如果其中一个链表未结束,将剩余部分连接到新链表的尾部
tail->next = (l1 ? l1 : l2);
return dummy->next; // 返回新链表的头节点
}
```
在这个函数中,我们遍历两个链表,每次都比较当前节点的值,将较小的节点加入新的链表,并更新指针。最后返回合并后的链表的头节点。
阅读全文