将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
解答
C语言
通过递归的思想,如果给定的两个链表有一个是空,就返回另一个链表。
如果不空,比较当前链表1、2的第一个值,
如果1的值 <= 2的值,保持1的表头不变,1的next为(1的next组成的链表与2进行合并),最终返回1;
1的值 >= 2的值,保持2的表头不变,2的next为(2的next组成的链表与1进行合并),最终返回2。
依次递归即可。
// 4 ms 5.6 MB
/**
* 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;
}else if (l2 == NULL) {
return l1;
}else if (l1->val <= l2->val) {
l1->next = mergeTwoLists(l1->next, l2);
return l1;
}else {
l2->next = mergeTwoLists(l2->next, l1);
return l2;
}
}
golang
nilNULL
//4 ms 2.6 MB
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
if l1 == nil {
return l2
} else if l2 == nil {
return l1
} else if l1.Val <= l2.Val {
l1.Next = mergeTwoLists(l1.Next, l2)
return l1
} else {
l2.Next = mergeTwoLists(l1, l2.Next)
return l2
}
}