示范代码如下:
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点类型
typedef struct node {
int data;
struct node *next;
} Node;
// 创建新节点
Node* create_node(int data)
{
Node *new_node = (Node*)malloc(sizeof(Node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
// 打印链表
void print_list(Node *head)
{
while (head) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
// 合并两个有序链表
Node* merge_lists(Node *head1, Node *head2)
{
// 如果其中一个链表为空,则直接返回另一个链表
if (!head1) {
return head2;
} else if (!head2) {
return head1;
}
// 从头开始比较两个链表中的节点数据,将较小值的节点插入新链表中
Node *new_head = NULL;
if (head1->data <= head2->data) {
new_head = head1;
new_head->next = merge_lists(head1->next, head2);
} else {
new_head = head2;
new_head->next = merge_lists(head1, head2->next);
}
return new_head;
}
int main()
{
// 构建链表1:1->3->5->7
Node *list1 = create_node(1);
list1->next = create_node(3);
list1->next->next = create_node(5);
list1->next->next->next = create_node(7);
// 构建链表2:2->4->6->8
Node *list2 = create_node(2);
list2->next = create_node(4);
list2->next->next = create_node(6);
list2->next->next->next = create_node(8);
printf("链表1: ");
print_list(list1);
printf("链表2: ");
print_list(list2);
// 合并两个有序链表
Node *merged_list = merge_lists(list1, list2);
printf("合并后的有序链表: ");
print_list(merged_list);
return 0;
}
在上面的代码中,我们定义了一个名为 Node
的结构体,表示链表中的每一个节点。然后我们定义了一些操作函数,如 create_node
用于创建新节点,print_list
用于打印链表,和 merge_lists
用于合并两个有序链表。
在主函数中,我们使用 create_node
函数创建了两个有序链表,并使用 merge_lists
函数将这两个链表进行合并。最后,我们使用 print_list
函数打印合并后的有序链表。