描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
讨论组题解有两种,主要是递归方法和非递归方法。
其中递归方法跟冒泡排序有点像,就是两个两个的比较大小,然后判断是否交换位置。
非递归办法是先创建一个空链表,因为L1和L2是单调递增的,然后从L1和L2链表的首位开始比较,选最小的加入到空链表中,以此类推。
题集来自https://blog.nowcoder.net/n/57d10bc60fc44bc6a1a9ee6e1f3ab64c?f=comment
非递归方法:
def Merge(self, l1, l2):
dummy = cur = ListNode(0)
while l1 and l2:
if l1.val < l2.val:
cur.next = l1
l1 = l1.next
else:
cur.next = l2
l2 = l2.next
cur = cur.next
cur.next = l1 or l2
return dummy.next
递归方法:
def Merge(self, pHead1, pHead2):
# write code here
if pHead1 and pHead2:
if pHead1.val > pHead2.val:
pHead1, pHead2 = pHead2, pHead1
pHead1.next = self.Merge(pHead1.next, pHead2)
return pHead1 or pHead2
Python的实现:
data1 = list(range(3, 9, 3))
print(data1)
data2 = list(range(1, 10, 3))
print(data2)
LL = LinkList()
l1 = LL.initList(data1)
l2 = LL.initList(data2)
S = Solution()
l_res = S.Merge(l1,l2)
LL.printlist(l_res)
initList以及printlist在JZ14有描述。
输出结果: