用c语言编写程序将两个有序递增的单链表合并为一个一个有序递增的单链表
时间: 2024-09-25 13:01:42 浏览: 48
C语言创建两个递增单链表,并合并成递增单链表
在C语言中,合并两个有序递增的单链表可以创建一个新的链表,其中元素按升序排列。下面是一个简单的示例,它首先比较两个链表的头部元素,然后将较小的元素添加到结果链表并移动相应的链表指针,直到其中一个链表结束。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点函数
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode != NULL) {
newNode->data = data;
newNode->next = NULL;
}
return newNode;
}
// 合并两个有序链表函数
Node* mergeSortedLists(Node* list1, Node* list2) {
Node* resultHead = NULL; // 结果链表的头节点
Node* current1 = list1; // 第一个链表指针
Node* current2 = list2; // 第二个链表指针
// 比较并连接两个链表
while (current1 != NULL && current2 != NULL) {
if (current1->data <= current2->data) {
if (resultHead == NULL) {
resultHead = current1;
} else {
resultHead->next = current1;
}
current1 = current1->next;
} else {
if (resultHead == NULL) {
resultHead = current2;
} else {
resultHead->next = current2;
}
current2 = current2->next;
}
}
// 添加剩余链表中的元素(如果有)
if (current1 != NULL) {
resultHead->next = current1;
} else if (current2 != NULL) {
resultHead->next = current2;
}
return resultHead;
}
// 打印链表
void printList(Node* node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->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);
printf("List 1: ");
printList(list1);
printf("List 2: ");
printList(list2);
Node* mergedList = mergeSortedLists(list1, list2);
printf("Merged List: ");
printList(mergedList);
return 0;
}
```
在这个代码中,`mergeSortedLists` 函数接收两个已排序的链表指针,创建一个新的链表并将它们合并成一个有序的链表。
阅读全文