C++ 合并两个有序链表,并写出主函数
时间: 2024-10-24 16:15:59 浏览: 39
在C++中,合并两个已经排序的链表可以采用递归或者迭代的方式来实现。这里我们提供一个简单的迭代方法示例:
```cpp
// 链表节点定义
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// 定义一个新的头结点作为合并后的结果
ListNode* head = nullptr;
// 初始化当前指针
ListNode* cur = head;
// 当两个链表都不为空
while (l1 && l2) {
// 如果l1的值小于l2的值,将l1的元素添加到结果链表中,并移动l1
if (l1->val < l2->val) {
cur->next = l1;
l1 = l1->next;
}
// 否则,将l2的元素添加
else {
cur->next = l2;
l2 = l2->next;
}
// 移动当前指针
cur = cur->next;
}
// 将剩余的链表添加到结果中(如果有的话)
if (l1) {
cur->next = l1;
} else {
cur->next = l2;
}
return head; // 返回新的头节点
}
int main() {
// 创建两个示例链表
ListNode* list1 = new ListNode(1);
list1->next = new ListNode(2);
list1->next->next = new ListNode(4);
ListNode* list2 = new ListNode(1);
list2->next = new ListNode(3);
list2->next->next = new ListNode(4); // 注意这里的4比list1里的大
// 合并两个链表
ListNode* mergedList = mergeTwoLists(list1, list2);
// 输出合并后的链表(这里仅做演示,实际应用需添加适当输出)
while (mergedList != nullptr) {
std::cout << mergedList->val << " ";
mergedList = mergedList->next;
}
// 手动释放内存
delete mergedList;
return 0;
}
```
在这个`main()`函数里,首先创建了两个已排序的链表,然后调用`mergeTwoLists`函数合并它们,最后遍历打印出合并后的链表。
阅读全文