将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
解法一:双指针法
class Solution:def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:sentinel = p = ListNode()while l1 and l2:if l1.val < l2.val:p.next = l1l1 = l1.nextelse:p.next = l2l2 = l2.nextp = p.nextp.next = l1 or l2return sentinel.next
解法二:递归法
递归法很容易得到退出条件:当l1与l2都耗尽时,返回None,即合并后的链表尾部。当l1为空或l2为空时,返回不为空的链表即可。
子问题是比较l1与l2当前节点的值,如果l1的值小于l2的值,则l1当前节点为合并后的链表头,同时尝试将l1.next与l2进行合并。子问题应返回链表头节点。
class Solution:def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:if not l1 and not l2:return Noneif not l1 or not l2:return l1 or l2if l1.val < l2.val:l1.next = self.mergeTwoLists(l1.next, l2)return l1else:l2.next = self.mergeTwoLists(l1, l2.next)return l2
