[LeetCode]21-合并两个有序链表
2018-10-17 本文已影响0人
杏仁小核桃
21. 合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
解法1: 用递归的方式来合并链表
这种方法的执行时间只超过了28%的提交记录
class Solution:
def mergeTwoLists(self, l1, l2):
def merge(l1, l2):
if not l1:
return l2
if not l2:
return l1
if l1.val > l2.val:
pres = l2
pres.next = merge(l1, l2.next)
return pres
else:
pres = l1
pres.next = merge(l1.next, l2)
return pres
res = merge(l1, l2)
return res
解法2: 简化后的递归算法
依然是递归的思想, 超过82.57%的提交
class Solution:
def mergeTwoLists(self, l1, l2):
if not l1 or not l2:
return l1 or l2
if l1.val < l2.val:
l1.next = self.mergeTwoLists(l1.next, l2)
return l1
else:
l2.next = self.mergeTwoLists(l1, l2.next)
return l2