c语言写:合并两个有序链表,编写一个函数,接受两个有序链表的头节点,将这两个链表合并为一个有序链表,并返回合并后的链表头节点
时间: 2024-10-26 22:02:45 浏览: 32
在C语言中,合并两个有序链表可以采用迭代或递归的方式实现。这里我们提供一个简单的迭代方法:
```c
// 定义链表节点结构体
typedef struct ListNode {
int val; // 节点值
struct ListNode *next; // 指向下一个节点的指针
} ListNode;
// 合并两个有序链表的函数
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// 如果l1为空,则直接返回l2
if (l1 == NULL) return l2;
// 如果l2为空,则直接返回l1
if (l2 == NULL) return l1;
// 创建一个新的链表头节点,初始化为第一个非空链表的头部
ListNode* head = l1 > l2 ? l1 : l2;
ListNode* current = head;
// 依次比较两个链表的节点,选择较小的一个添加到结果链表中
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 head;
}
```
阅读全文