用c语言实现头插法创建单链表并实现合并
时间: 2024-05-02 15:21:57 浏览: 104
用c语言实现链表的合并
以下是使用C语言实现头插法创建单链表并实现合并的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data; // 数据域
struct Node* next; // 指针域
} Node;
// 头插法创建单链表
Node* createLinkedList(int arr[], int n) {
Node* head = NULL;
for (int i = 0; i < n; i++) {
Node* node = (Node*)malloc(sizeof(Node)); // 创建新节点
node->data = arr[i]; // 赋值数据
node->next = head; // 插入到头部
head = node; // 更新头节点
}
return head;
}
// 打印链表
void printLinkedList(Node* head) {
Node* p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 合并两个有序链表
Node* mergeLinkedList(Node* head1, Node* head2) {
Node* dummy = (Node*)malloc(sizeof(Node)); // 创建虚拟头节点
Node* p = dummy; // 定义当前节点
while (head1 != NULL && head2 != NULL) {
if (head1->data <= head2->data) {
p->next = head1;
head1 = head1->next;
} else {
p->next = head2;
head2 = head2->next;
}
p = p->next;
}
p->next = head1 == NULL ? head2 : head1; // 将未遍历完的链表接到后面
return dummy->next; // 返回虚拟头节点的下一个节点
}
int main() {
int arr1[] = {1, 3, 5};
int arr2[] = {2, 4, 6};
Node* head1 = createLinkedList(arr1, 3);
Node* head2 = createLinkedList(arr2, 3);
printf("List1: ");
printLinkedList(head1);
printf("List2: ");
printLinkedList(head2);
Node* mergedHead = mergeLinkedList(head1, head2);
printf("Merged List: ");
printLinkedList(mergedHead);
return 0;
}
```
输出结果为:
```
List1: 5 3 1
List2: 6 4 2
Merged List: 1 2 3 4 5 6
```
阅读全文