合并两个链表成一个新链表的c++代码
时间: 2024-09-16 10:05:24 浏览: 48
c++ 如何合并两个有序链表
合并两个已排序的链表(例如,它们都是升序排列的节点),可以使用迭代或者递归的方式。这里是一个简单的C++迭代方法示例:
```cpp
#include <iostream>
// 定义链表节点结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// 创建一个新的头结点
ListNode dummy(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指向下一个位置
}
// 如果其中一个链表已为空,将另一个链表剩余部分添加到结果链表
if (l1)
tail->next = l1;
else
tail->next = l2;
return dummy.next; // 返回新链表的头节点
}
// 测试代码
int main() {
ListNode* list1 = new ListNode{1};
list1->next = new ListNode{4};
list1->next->next = new ListNode{5};
ListNode* list2 = new ListNode{2};
list2->next = new ListNode{6};
list2->next->next = new ListNode{7};
ListNode* mergedList = mergeTwoLists(list1, list2);
// 打印新链表
while (mergedList) {
std::cout << mergedList->val << " ";
mergedList = mergedList->next;
}
return 0;
}
```
当你运行这个程序时,它会输出 "1 2 4 5 6 7",这是两个输入链表合并后的结果。
阅读全文