C++合并两个升序链表
时间: 2023-09-12 10:11:00 浏览: 94
要合并两个升序链表,可以使用迭代的方法来实现。具体步骤如下:
1. 创建一个新的链表头节点,用来存储合并后的链表。
2. 对两个链表的头节点进行比较,将较小的节点作为合并后表的当前节点,并移动到下一个节点。
3. 重复步骤2,直到其中一个链表为空。
4. 将剩余非空链表的节点直接连接到合并后链表的尾部。
5. 返回合并后的链表头节点。
以下是使用C语言实现的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int val;
struct ListNode* next;
};
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
struct ListNode dummy; // 新链表头节点
struct 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;
} else {
tail->next = l2;
}
return dummy.next; // 返回合并后链表的头节点
}
int main() {
// 创建链表1:1->2->4
struct ListNode* l1 = malloc(sizeof(struct ListNode));
l1->val = 1;
l1->next = malloc(sizeof(struct ListNode));
l1->next->val = 2;
l1->next->next = malloc(sizeof(struct ListNode));
l1->next->next->val = 4;
l1->next->next->next = NULL;
// 创建链表2:1->3->4
struct ListNode* l2 = malloc(sizeof(struct ListNode));
l2->val = 1;
l2->next = malloc(sizeof(struct ListNode));
l2->next->val = 3;
l2->next->next = malloc(sizeof(struct ListNode));
l2->next->next->val = 4;
l2->next->next->next = NULL;
// 合并两个链表
struct ListNode* mergedList = mergeTwoLists(l1, l2);
// 打印合并后的链表
while (mergedList) {
printf("%d ", mergedList->val);
mergedList = mergedList->next;
}
return 0;
}
```
这段代码中,我们创建了两个链表 `l1` 和 `l2`,并将它们合并后的结果打印出来。在实际使用时,可以根据需要对链表进行相应的操作。