链式有序表的合并用C语言实现
时间: 2023-05-24 09:06:55 浏览: 67
链式有序表合并的C语言实现
```c
#include<stdio.h>
#include<stdlib.h>
// 定义链表节点结构体
typedef struct node{
int data;
struct node* next;
}Node;
// 创建新节点并返回
Node* createNode(int data){
Node* temp = (Node*)malloc(sizeof(Node));
temp->data = data;
temp->next = NULL;
return temp;
}
// 插入数据到链表中
void insert(Node** head, int data){
Node* temp = createNode(data);
if(*head == NULL){
*head = temp;
return;
}
Node* cur = *head;
while(cur->next != NULL){
cur = cur->next;
}
cur->next = temp;
}
// 遍历链表并打印
void traverse(Node* head){
printf("链表元素:");
while(head != NULL){
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
// 合并链表
Node* merge(Node* head1, Node* head2){
if(head1 == NULL) return head2;
if(head2 == NULL) return head1;
Node* mergeHead = NULL;
if(head1->data < head2->data){
mergeHead = head1;
mergeHead->next = merge(head1->next, head2);
} else {
mergeHead = head2;
mergeHead->next = merge(head1, head2->next);
}
return mergeHead;
}
int main(){
Node* head1 = NULL;
Node* head2 = NULL;
insert(&head1, 1);
insert(&head1, 3);
insert(&head1, 5);
traverse(head1);
insert(&head2, 2);
insert(&head2, 4);
insert(&head2, 6);
traverse(head2);
Node* mergeHead = merge(head1, head2);
traverse(mergeHead);
return 0;
}
```