Merge two linked list C语言
时间: 2024-09-19 13:16:06 浏览: 49
在C语言中,合并两个已排序的链表可以使用迭代或递归的方式来实现。这里提供一种简单的迭代方法:
```c
// 定义链表节点结构体
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
// 合并两个有序链表函数
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// 创建一个新的头节点
ListNode* head = NULL;
ListNode* tail = NULL; // 尾部指针,初始时指向NULL
// 当任意一个链表非空时
while (l1 != NULL && l2 != NULL) {
// 如果l1的值小于l2的值,将l1连接到tail之后
if (l1->val < l2->val) {
if (head == NULL) {
head = l1;
} else {
tail->next = l1;
}
l1 = l1->next;
} else { // 否则,将l2连接到tail之后
if (head == NULL) {
head = l2;
} else {
tail->next = l2;
}
l2 = l2->next;
}
// 更新尾部指针
tail = l1 ? l1 : l2;
}
// 如果其中一个链表还有剩余元素,则将其添加到结果链表尾部
if (l1 != NULL) {
tail->next = l1;
} else {
tail->next = l2;
}
return head;
}
```
在这个函数中,我们首先初始化一个新链表`head`和一个`tail`指针。然后遍历两个输入链表,每次比较当前节点的值,将较小的节点链接到尾部。最后返回合并后的链表头。
阅读全文