C语言实现链表的合并
时间: 2024-10-16 17:14:40 浏览: 50
c语言有序链表合并.rar
C语言中实现两个已排序链表的合并通常涉及到递归或迭代的方式。这里是一个简单的迭代方法,也就是合并两个有序链表:
```c
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// 创建一个新的头节点,并初始化它为NULL
ListNode* head = NULL;
ListNode* tail = NULL;
// 当任一链表非空时,继续遍历
while (l1 != NULL && l2 != NULL) {
if (l1->val < l2->val) {
// 如果l1的值更小,将其添加到结果链表中
if (head == NULL) {
head = tail = l1; // 首次添加,头和尾都指向l1
} else {
tail->next = l1; // 尾部链接到l1
tail = l1; // 更新尾部指针
}
l1 = l1->next; // 移动l1到下一个元素
} else {
// 否则,l2的值较小,处理类似
if (head == NULL) {
head = tail = l2;
} else {
tail->next = l2;
tail = l2;
}
l2 = l2->next;
}
}
// 检查剩余未处理的链表元素并添加到结果链表
if (l1 != NULL) {
tail->next = l1;
} else if (l2 != NULL) {
tail->next = l2;
}
return head;
}
```
阅读全文