用c++合并两个有序链表
时间: 2024-05-25 15:05:52 浏览: 97
以下是合并两个有序链表的C语言代码示例:
```
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
// 创建新节点
ListNode* newNode(int val) {
ListNode* node = (ListNode*)malloc(sizeof(ListNode));
node->val = val;
node->next = NULL;
return node;
}
// 合并两个有序链表
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// 创建哨兵节点
ListNode* sentinel = newNode(0);
// 定义当前节点和哨兵节点
ListNode* cur = sentinel;
// 遍历两个链表,将小的节点加入新链表
while (l1 && l2) {
if (l1->val < l2->val) {
cur->next = l1;
l1 = l1->next;
} else {
cur->next = l2;
l2 = l2->next;
}
cur = cur->next;
}
// 处理剩余节点
if (l1) {
cur->next = l1;
} else if (l2) {
cur->next = l2;
}
// 返回合并后的链表
return sentinel->next;
}
// 输出链表
void printList(ListNode* head) {
while (head) {
printf("%d -> ", head->val);
head = head->next;
}
printf("NULL\n");
}
int main() {
// 创建两个有序链表
ListNode* l1 = newNode(1);
l1->next = newNode(3);
l1->next->next = newNode(5);
ListNode* l2 = newNode(2);
l2->next = newNode(4);
l2->next->next = newNode(6);
// 合并两个有序链表
ListNode* mergedList = mergeTwoLists(l1, l2);
// 输出合并后的链表
printList(mergedList);
return 0;
}
```
输出结果为:
```
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> NULL
```
阅读全文