编写c++/c代码将两个递增的有序链表合并为一个递增的有序链表
时间: 2024-10-09 10:10:31 浏览: 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) {
// 如果其中一个链表为空,直接返回另一个
if (!l1) return l2;
if (!l2) return l1;
// 创建一个新的头节点,初始指向第一个列表
ListNode* head = l1;
// 当两个链表都有元素时比较并链接
while (l1 && l2) {
if (l1->val <= l2->val) {
l1 = l1->next; // 移动到下一个元素
} else {
// 将l2的当前元素插入到链表中
head->next = l2;
head = head->next;
l2 = l2->next;
}
}
// 将剩余未处理的链表连接到结果链表尾部
head->next = (l1 ? l1 : l2); // 只有一个链表剩下的情况
return head;
}
int main() {
// 为测试创建两个链表示例
ListNode* list1 = new ListNode(1);
list1->next = new ListNode(3);
list1->next->next = new ListNode(5);
ListNode* list2 = new ListNode(2);
list2->next = new ListNode(4);
list2->next->next = new ListNode(6);
// 合并链表
ListNode* mergedList = mergeTwoLists(list1, list2);
// 打印合并后的链表
ListNode* temp = mergedList;
while (temp) {
std::cout << temp->val << " ";
temp = temp->next;
}
std::cout << std::endl;
// 清理内存
delete mergedList;
return 0;
}
```
在这个例子中,我们首先检查两个链表是否为空,然后遍历它们并将较小的元素添加到新的链表中。当一个链表结束时,我们将另一个链表剩余部分直接连接到结果链表的尾部。
阅读全文