使用顺序表合并两个列表C语言代码
时间: 2024-09-29 08:08:45 浏览: 39
在C语言中,合并两个顺序表(动态数组)可以采用遍历的方式逐个添加元素到一个新的顺序表中。以下是一个简单的示例,假设我们有两个指针分别指向两个已排序的链表的头部:
```c
#include <stdio.h>
#include <stdlib.h> // 包含malloc和free函数
// 结构体表示链表节点
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode != NULL) {
newNode->data = value;
newNode->next = NULL;
}
return newNode;
}
// 合并两个有序链表
Node* mergeLists(Node* list1, Node* list2) {
if (list1 == NULL) return list2; // 如果list1为空,直接返回list2
if (list2 == NULL) return list1; // 如果list2为空,直接返回list1
// 判断两个链表的当前节点值谁小,然后添加较小的那个到结果链表
if (list1->data <= list2->data) {
list1->next = mergeLists(list1->next, list2);
return list1;
} else {
list2->next = mergeLists(list1, list2->next);
return list2;
}
}
// 打印链表
void printList(Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
// 创建两个示例链表
Node* list1 = createNode(1);
list1->next = createNode(3);
list1->next->next = createNode(5);
Node* list2 = createNode(2);
list2->next = createNode(4);
list2->next->next = createNode(6);
// 合并两个链表
Node* mergedList = mergeLists(list1, list2);
// 打印合并后的链表
printList(mergedList);
return 0;
}
```
在这个例子中,`mergeLists()` 函数递归地将较小的元素添加到新的链表中,直到其中一个链表为空为止。最后得到的是一个按升序排列的新链表。
阅读全文