C语言编程实现将两个递增有序线性链表3,7,8,9和2,5,7归并成一个非递增有序表
时间: 2024-11-04 12:10:04 浏览: 24
在C语言中,合并两个递增有序的线性链表可以采用迭代或者递归的方式实现。这里我会提供一种简单的迭代方法:
首先,我们需要定义一个链表节点结构体,包含数据域和指向下一个节点的指针:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
```
然后,我们可以创建两个辅助函数,一个是用于比较两个节点值的,另一个是合并两个已排序链表的主函数:
```c
Node* mergeLists(Node* list1, Node* list2) {
Node* result = NULL; // 初始化结果链表头
if (list1 == NULL)
return list2;
else if (list2 == NULL)
return list1;
// 比较节点值,选择较小的一个添加到结果链表
if (list1->data <= list2->data) {
result = list1;
result->next = mergeLists(list1->next, list2);
} else {
result = list2;
result->next = mergeLists(list1, list2->next);
}
return result;
}
```
最后,在main函数中创建两个链表,并调用上述合并函数:
```c
int main() {
Node* list1 = (Node*)malloc(sizeof(Node));
list1->data = 3;
list1->next = (Node*)malloc(sizeof(Node));
list1->next->data = 7;
list1->next->next = (Node*)malloc(sizeof(Node));
list1->next->next->data = 8;
list1->next->next->next = (Node*)malloc(sizeof(Node));
list1->next->next->next->data = 9;
list1->next->next->next->next = NULL;
Node* list2 = (Node*)malloc(sizeof(Node));
list2->data = 2;
list2->next = (Node*)malloc(sizeof(Node));
list2->next->data = 5;
list2->next->next = (Node*)malloc(sizeof(Node));
list2->next->next->data = 7;
list2->next->next->next = NULL;
Node* mergedList = mergeLists(list1, list2);
// 打印合并后的链表
while (mergedList != NULL) {
printf("%d ", mergedList->data);
mergedList = mergedList->next;
}
// 清理内存
free(mergedList);
return 0;
}
```
当你运行这个程序,它会输出合并后的非递增有序表:`2 3 5 7 7 8 9`。
阅读全文