C,将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
时间: 2023-07-11 16:08:39 浏览: 103
可以使用递归的方法解决这个问题。具体来说,假设我们有两个升序链表 l1 和 l2,我们比较它们的头节点 l1.val 和 l2.val 的大小关系,如果 l1.val < l2.val,则将 l1 的头节点与剩余的链表合并,否则将 l2 的头节点与剩余的链表合并。重复此过程直到其中一个链表为空。
以下是实现的 C 代码:
```c
#include <stdlib.h>
// Definition for singly-linked list.
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
if (l1 == NULL) {
return l2;
}
if (l2 == NULL) {
return l1;
}
if (l1->val < l2->val) {
l1->next = mergeTwoLists(l1->next, l2);
return l1;
} else {
l2->next = mergeTwoLists(l1, l2->next);
return l2;
}
}
```
在这个递归函数中,我们首先检查 l1 和 l2 是否为空。如果其中一个链表为空,则返回另一个链表。否则,我们比较 l1 和 l2 的头节点 l1->val 和 l2->val,如果 l1->val 小于 l2->val,则将 l1 的头节点与剩余的链表合并,否则将 l2 的头节点与剩余的链表合并。我们重复此过程直到其中一个链表为空,然后返回合并后的链表。
阅读全文