合并两个有序的单链表C语言
时间: 2024-10-09 22:02:37 浏览: 40
c语言实现两个单链表的交叉合并方式
5星 · 资源好评率100%
合并两个有序的单链表是指将两个已经按照升序排列的链表连接成一个新的有序链表。在C语言中,可以采用迭代或递归的方式来实现这个功能。这里我们提供一种简单的迭代方法:
```c
typedef struct ListNode {
int val; // 节点值
struct ListNode *next; // 指向下一个节点的指针
} ListNode;
ListNode* mergeTwoSortedLists(ListNode* l1, ListNode* l2) {
if (!l1) return l2;
if (!l2) return l1;
ListNode dummy = {0, NULL}; // 创建虚拟头节点,避免直接比较NULL指针
ListNode* tail = &dummy; // 尾部指向临时链表的最后一个节点
while (l1 && l2) {
if (l1->val < l2->val) {
tail->next = l1;
l1 = l1->next;
} else {
tail->next = l2;
l2 = l2->next;
}
tail = tail->next; // 更新tail指向新插入的位置
}
if (l1) tail->next = l1; // 如果有一个链表未遍历完,将其剩余部分添加到结果链表
else tail->next = l2;
return dummy.next; // 返回合并后的实际头节点
}
```
在这个函数里,我们创建了一个虚拟头节点,使得我们可以从头开始比较两个链表的元素。每次比较都会选择较小的节点添加到结果链表,并更新尾部指针。当其中一个链表遍历完毕,我们将另一个链表剩余的部分追加到结果链表。
阅读全文