c语言有序单链表合并
时间: 2024-10-20 13:02:03 浏览: 35
在C语言中,如果你有一个有序的单链表(每个节点包含一个值和指向下一个节点的指针),你可以通过迭代或递归的方式将两个已排序的链表合并成一个新的有序链表。以下是简单的迭代方法:
```c
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// 如果l1或l2为空,则直接返回另一个链表
if (!l1) return l2;
if (!l2) return l1;
// 创建新链表的头结点
ListNode* head = NULL, *temp = NULL;
if (l1->val <= l2->val) {
head = l1;
temp = l1->next;
l1->next = NULL; // 防止l1被修改
} else {
head = l2;
temp = l2->next;
l2->next = NULL;
}
// 当任一链表非空时,比较并添加到新链表
while (temp && temp->next) {
if (temp->next->val <= head->val) {
temp = temp->next;
} else {
head->next = temp->next;
temp->next = NULL;
head = head->next;
}
}
// 添加剩余未处理的链表到新链表
if (temp) head->next = temp;
return head;
}
```
阅读全文