下面是使用C语言编写的合并有序链表的函数:
#include <stdio.h>
#include <stdlib.h>
// 链表结构体
typedef struct ListNode {
int val; // 节点数据
struct ListNode* next; // 下一个节点指针
} ListNode, *LinkedList;
// 合并两个有序链表
LinkedList mergeTwoLists(LinkedList l1, LinkedList l2) {
ListNode* p1 = l1;
ListNode* p2 = l2;
ListNode dummy; // 哑结点
ListNode* tail = &dummy; // 新链表的最后一个节点
while (p1 && p2) {
if (p1->val < p2->val) { // 如果p1的值小于p2的值
tail->next = p1; // 将p1接到新链表后面
p1 = p1->next; // p1指针向后移动
} else { // 如果p1的值大于等于p2的值
tail->next = p2; // 将p2接到新链表后面
p2 = p2->next; // p2指针向后移动
}
tail = tail->next; // tail指针向后移动
}
if (p1) { // 如果p1链表还有剩余元素
tail->next = p1;
}
if (p2) { // 如果p2链表还有剩余元素
tail->next = p2;
}
return dummy.next; // 返回合并后的新链表的头结点
}