有序链表的合并 c语言
时间: 2023-09-12 08:02:50 浏览: 82
以下是 C 语言实现的有序链表合并代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int val; // 值
struct Node* next; // 指向下一个节点的指针
} Node;
// 创建新节点
Node* createNode(int val) {
Node* node = (Node*) malloc(sizeof(Node));
node->val = val;
node->next = NULL;
return node;
}
// 合并两个有序链表
Node* merge(Node* l1, Node* l2) {
// 创建一个虚拟头节点方便操作
Node* dummy = createNode(0);
Node* cur = dummy;
// 遍历两个链表,将值较小的节点插入到新链表中
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;
}
if (l2) {
cur->next = l2;
}
// 返回新链表的第一个节点
return dummy->next;
}
// 打印链表
void printList(Node* head) {
Node* cur = head;
while (cur) {
printf("%d ", cur->val);
cur = cur->next;
}
printf("\n");
}
int main() {
// 创建两个有序链表
Node* l1 = createNode(1);
l1->next = createNode(2);
l1->next->next = createNode(4);
Node* l2 = createNode(1);
l2->next = createNode(3);
l2->next->next = createNode(4);
// 合并两个有序链表
Node* mergedList = merge(l1, l2);
// 打印合并后的链表
printList(mergedList);
return 0;
}
```
这个代码会创建两个有序链表,然后调用 `merge` 函数将它们合并成一个新的有序链表,并打印输出。
阅读全文