用c语言合并有序链表
时间: 2024-11-06 19:18:40 浏览: 13
在C语言中,合并两个已排序的链表通常涉及比较当前节点的数据并把较小的一个添加到新链表中,同时更新链表指针,直到其中一个链表遍历完毕。以下是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 函数声明
Node* mergeSortedLists(Node* list1, Node* list2);
// 合并函数实现
Node* mergeSortedLists(Node* list1, Node* list2) {
if (!list1) return list2; // 如果list1为空,直接返回list2
if (!list2) return list1; // 如果list2为空,直接返回list1
// 创建临时头部
Node* head = (list1->data <= list2->data) ? list1 : list2;
// 比较并链接节点
if (list1->data <= list2->data) {
list1 = list1->next;
} else {
head->next = list2;
list2 = list2->next;
}
// 递归地继续合并
head->next = mergeSortedLists(list1, list2);
return head;
}
// 测试
int main() {
// 初始化链表示例
Node* list1 = malloc(sizeof(Node));
list1->data = 1;
list1->next = malloc(sizeof(Node));
list1->next->data = 4;
list1->next->next = NULL;
Node* list2 = malloc(sizeof(Node));
list2->data = 1;
list2->next = malloc(sizeof(Node));
list2->next->data = 3;
list2->next->next = NULL;
Node* result = mergeSortedLists(list1, list2);
// 打印合并后的链表
while(result != NULL) {
printf("%d -> ", result->data);
result = result->next;
}
return 0;
}
```
在这个例子中,`mergeSortedLists`函数会创建一个新的有序链表,其中包含原两个链表的所有元素,按照升序排列。
阅读全文