将两个有序顺序表合并成一个线性表,使合并后的线性表仍然有序(他们都是同序)c语言
时间: 2024-10-08 20:22:04 浏览: 48
在C语言中,将两个已排序的顺序表合并成一个有序列表,通常可以使用迭代或递归的方式实现。这里提供一个简单的迭代方法:
```c
#include <stdio.h>
// 定义结构体表示节点
typedef struct Node {
int data;
struct Node* next;
} Node;
// 合并函数
Node* mergeSortedLists(Node* list1, Node* list2) {
// 创建新节点作为结果
Node* merged_list = NULL;
if (list1 == NULL) return list2; // 如果list1为空,则返回list2
if (list2 == NULL) return list1; // 如果list2为空,则返回list1
// 比较两个列表当前元素的大小
if (list1->data <= list2->data) {
merged_list = list1; // 把较小的元素添加到结果链表
merged_list->next = mergeSortedLists(list1->next, list2); // 递归处理剩余部分
} else {
merged_list = list2;
merged_list->next = mergeSortedLists(list1, list2->next);
}
return merged_list;
}
// 打印链表
void printList(Node* node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
int main() {
// 初始化两个示例列表
Node* list1 = (Node*)malloc(sizeof(Node));
list1->data = 1;
list1->next = (Node*)malloc(sizeof(Node));
list1->next->data = 3;
list1->next->next = NULL;
Node* list2 = (Node*)malloc(sizeof(Node));
list2->data = 2;
list2->next = (Node*)malloc(sizeof(Node));
list2->next->data = 4;
list2->next->next = NULL;
// 合并并打印结果
Node* merged_list = mergeSortedLists(list1, list2);
printList(merged_list);
return 0;
}
```
这个程序会合并两个输入的已排序列表 `list1` 和 `list2`,并保持合并后的列表有序。运行上面的main函数,你会看到合并后的结果:1 2 3 4。
阅读全文