c语言写:已知两个有序链表,编写一个函数,接受两个有序链表的头节点,将这两个链表合并为一个有序链表,并返回合并后的链表头节点
时间: 2024-10-26 13:17:31 浏览: 40
在C语言中,合并两个有序链表可以采用迭代或递归的方式实现。这里是一个简单的迭代方法的示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// 创建一个新的空链表作为结果
ListNode* dummy = (ListNode*)malloc(sizeof(ListNode));
dummy->val = INT_MIN; // 使用最小值初始化,表示未找到有效元素
ListNode* tail = dummy;
// 比较并合并两个链表
while(l1 != NULL && l2 != NULL) {
if(l1->val <= l2->val) {
tail->next = l1;
l1 = l1->next;
} else {
tail->next = l2;
l2 = l2->next;
}
tail = tail->next;
}
// 将剩余链表连接到新链表的末尾
if(l1 != NULL) {
tail->next = l1;
} else {
tail->next = l2;
}
return dummy->next; // 返回合并后的新链表头节点
}
```
这个函数首先创建一个虚拟头节点(dummy),然后遍历两个输入链表,每次都选择较小的节点添加到新链表中,直到其中一个链表结束。最后,将剩余的那个链表添加到新链表的末尾。
阅读全文