将两个单链表合并成递增单链表 c语言
时间: 2024-09-28 15:12:04 浏览: 50
在C语言中,将两个已排序的单链表合并成一个新的递增链表,可以采用迭代或递归的方式实现。这里是一个简单的迭代方法示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* newNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 合并递增链表
Node* mergeSortedLists(Node* list1, Node* list2) {
// 创建头节点
Node* head = NULL;
if (list1 == NULL) return list2; // 如果list1为空,则返回list2
if (list2 == NULL) return list1; // 如果list2为空,则返回list1
// 初始化当前指针
Node* curr1 = list1;
Node* curr2 = list2;
// 比较节点值,选择较小的一个添加到新链表
while (curr1 && curr2) {
if (curr1->data <= curr2->data) {
if (head == NULL) head = curr1; // 新链表的第一个元素
else curr1->next = head; // 连接两个链表
curr1 = curr1->next;
} else {
if (head == NULL) head = curr2; // 新链表的第一个元素
else curr2->next = head; // 连接两个链表
curr2 = curr2->next;
}
}
// 添加剩余链表中的节点
while (curr1) {
if (head == NULL) head = curr1;
else curr1->next = head;
curr1 = curr1->next;
}
while (curr2) {
if (head == NULL) head = curr2;
else curr2->next = head;
curr2 = curr2->next;
}
return head;
}
// 打印链表
void printList(Node* node) {
while (node) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
int main() {
Node* list1 = newNode(1);
list1->next = newNode(4);
list1->next->next = newNode(5);
Node* list2 = newNode(2);
list2->next = newNode(3);
Node* mergedList = mergeSortedLists(list1, list2);
printf("Merged List: ");
printList(mergedList);
return 0;
}
```
当你运行这个程序时,它会输出合并后的递增链表:`1 2 3 4 5`。
阅读全文