c语言合并两个线性表代码
时间: 2024-10-17 10:03:05 浏览: 8
在C语言中,合并两个已排序的线性表通常涉及到链表的操作。这里有一个简单的示例,展示如何通过遍历和链接节点的方式来合并两个有序链表:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 合并两个有序链表
Node* mergeSortedLists(Node* list1, Node* list2) {
// 初始化结果头节点
Node* head = NULL;
// 如果其中一个链表为空,直接返回另一个链表
if (list1 == NULL)
return list2;
else if (list2 == NULL)
return list1;
// 比较当前节点的数据,选择较小的一个作为新链表的节点,并更新指针
if (list1->data <= list2->data) {
head = list1;
list1 = list1->next;
} else {
head = list2;
list2 = list2->next;
}
// 递归地处理剩余部分直到一个链表结束
head->next = mergeSortedLists(list1, list2);
return head;
}
// 打印链表
void printList(Node* node) {
while (node != NULL) {
printf("%d -> ", node->data);
node = node->next;
}
printf("NULL\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* mergedList = mergeSortedLists(list1, list2);
// 打印合并后的链表
printList(mergedList);
return 0;
}
```
阅读全文