两个有序链表序列的合并c语言代码
时间: 2024-09-26 13:17:33 浏览: 42
两个有序链表序列的合并_C语言_
5星 · 资源好评率100%
在C语言中,合并两个有序链表可以采用迭代或者递归的方式实现。这里是一个简单的迭代方法的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
// 合并两个有序链表
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// 创建一个新的头节点,并初始化为NULL
ListNode* dummy = (ListNode*)malloc(sizeof(ListNode));
dummy->next = NULL;
ListNode* current = dummy; // 当前指针
while (l1 != NULL && l2 != NULL) { // 只要任一链表非空
if (l1->val <= l2->val) { // 将较小的值节点插入当前节点
current->next = l1;
l1 = l1->next;
} else {
current->next = l2;
l2 = l2->next;
}
current = current->next; // 移动到下一个位置
}
// 如果其中一个链表已经遍历完,则将另一个链表剩余部分添加到结果链表尾部
if (l1 != NULL) {
current->next = l1;
} else {
current->next = l2;
}
return dummy->next; // 返回新的头节点
}
// 测试函数
void printList(ListNode* head) {
ListNode* temp = head;
while (temp != NULL) {
printf("%d ", temp->val);
temp = temp->next;
}
printf("\n");
}
int main() {
// 创建两个示例链表
ListNode* list1 = (ListNode*)malloc(sizeof(ListNode));
list1->val = 1;
list1->next = (ListNode*)malloc(sizeof(ListNode));
list1->next->val = 2;
list1->next->next = NULL;
ListNode* list2 = (ListNode*)malloc(sizeof(ListNode));
list2->val = 3;
list2->next = (ListNode*)malloc(sizeof(ListNode));
list2->next->val = 4;
list2->next->next = NULL;
// 合并链表
ListNode* merged = mergeTwoLists(list1, list2);
// 打印合并后的链表
printList(merged);
return 0;
}
```
在这个例子中,`mergeTwoLists` 函数接收两个有序链表的头节点作为参数,返回合并后的有序链表头节点。
阅读全文