题目描述:
题解一(通过):
1.将l1 l2中所有节点值加入list nums中,对nums按照从小到大排序。
2.创建ListNode node1,其val值为nums[-1],即排序之后最后一个数。
3.从nums倒数第二个数开始,创建ListNode node,val值为nums[i],next=node1,然后将node1更新为node。即从排序之后链表的最后一个节点开始创建。
需要注意的是:要考虑l1 l2均为空或l1 l2一共只有一个节点的特殊情况。
class Solution(object): def mergeTwoLists(self, l1, l2): nums = [] while l1!=None: nums.append(l1.val) l1=l1.next while l2!=None: nums.append(l2.val) l2=l2.next if len(nums)==0: return None if len(nums)==1: return ListNode(nums[0]) nums = sorted(nums) n = len(nums) node1 = ListNode(nums[-1]) for i in range(n-2,-1,-1): node = ListNode(val=nums[i],next=node1) node1 = node return node
题解二(通过):
从l1 l2第一个节点开始比较大小添加较小的。
如果某一个链表为空,则直接将剩余的添加到next
class Solution(object): def mergeTwoLists(self, l1, l2): head = ListNode() node = head while l1!=None and l2!=None: if l1.val>=l2.val: node.next=l2 l2=l2.next elif l2.val>l1.val: node.next=l1 l1=l1.next node = node.next if l1==None: node.next=l2 elif l2==None: node.next=l1 return head.next
注意:node = node.next一定不能忘!
题解三:递归
class Solution(object): def mergeTwoLists(self, l1, l2): if l1==None: return l2 if l2==None: return l1 if l1.val<l2.val: l1.next = self.mergeTwoLists(l1.next,l2) return l1 else: l2.next = self.mergeTwoLists(l1,l2.next) return l2