用c语言实现两个单链表的合并
时间: 2023-09-02 16:14:52 浏览: 122
以下是用C语言实现两个单链表合并的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
struct Node* mergeLists(struct Node* head1, struct Node* head2) {
if (head1 == NULL) {
return head2;
}
if (head2 == NULL) {
return head1;
}
struct Node* mergedHead = NULL;
if (head1->data < head2->data) {
mergedHead = head1;
mergedHead->next = mergeLists(head1->next, head2);
} else {
mergedHead = head2;
mergedHead->next = mergeLists(head1, head2->next);
}
return mergedHead;
}
void printList(struct Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
struct Node* head1 = NULL;
struct Node* head2 = NULL;
// add nodes to list 1
head1 = (struct Node*) malloc(sizeof(struct Node));
head1->data = 1;
head1->next = (struct Node*) malloc(sizeof(struct Node));
head1->next->data = 2;
head1->next->next = (struct Node*) malloc(sizeof(struct Node));
head1->next->next->data = 4;
head1->next->next->next = NULL;
// add nodes to list 2
head2 = (struct Node*) malloc(sizeof(struct Node));
head2->data = 1;
head2->next = (struct Node*) malloc(sizeof(struct Node));
head2->next->data = 3;
head2->next->next = (struct Node*) malloc(sizeof(struct Node));
head2->next->next->data = 4;
head2->next->next->next = NULL;
printf("List 1: ");
printList(head1);
printf("List 2: ");
printList(head2);
struct Node* mergedHead = mergeLists(head1, head2);
printf("Merged List: ");
printList(mergedHead);
return 0;
}
```
在上面的代码中,我们首先定义了一个名为“Node”的结构体,用于表示链表中的每个节点。然后,我们定义了一个名为“mergeLists”的函数,该函数接受两个链表的头节点作为参数,并返回一个指向合并后链表的头节点的指针。
在“mergeLists”函数中,我们首先检查两个链表中是否有一个为空,如果是,则返回另一个链表。否则,我们比较两个链表的第一个节点的数据,将较小的节点作为合并后链表的头节点。然后,我们递归调用“mergeLists”函数,将未合并的链表和较小节点的下一个节点作为参数,并将返回的链表连接到较小节点的下一个节点上。
最后,我们定义了一个名为“printList”的函数,用于打印链表中的所有节点。在“main”函数中,我们首先创建两个链表,并将节点添加到它们中。然后,我们打印两个链表,并调用“mergeLists”函数来合并它们。最后,我们打印合并后的链表。
阅读全文