题目描述:
合并两个已排序的链表,并将其作为一个新列表返回。新列表应该通过拼接前两个列表的节点来完成。
解题思路:
构造一个新的链表空间,利用链表的next依次组合,不难,就是生疏了忘了链表看了下。
代码:
# Definition for singly-linked list. #class ListNode(object): # def __init__(self, x): # self.val = x # self.next = None class Solution(object): def mergeTwoLists(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ #newnode = ListNode(None) # define the res ListNode if l1 ==None and l2 == None: # l1 and l2 both are none return None if l1 == None: # l1 is none return l2 if l2 == None: # l2 is none return l1 # initialize the res ListNode if l1.val >= l2.val: newnode = l2 l2 = l2.next else: newnode = l1 l1 = l1.next res = newnode while l1 != None and l2 != None: # l1 and l2 record in the res if l1.val <= l2.val: res.next = l1 res = res.next l1 = l1.next else: res.next = l2 res = res.next l2 = l2.next if l1 != None: # l1 is not none but l2 is none res.next = l1 res = res.next l1 = l1.next if l2 != None: # l2 is not none but l1 is none res.next = l2 res = res.next l2 = l2.next return newnode
'''进行了简化'''
代码:
# -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: # 返回合并后列表 def Merge(self, pHead1, pHead2): # write code here res = head = ListNode(0) while pHead1 and pHead2: if pHead1.val > pHead2.val: head.next = pHead2 pHead2 = pHead2.next else: head.next = pHead1 pHead1 = pHead1.next head = head.next if pHead1: head.next = pHead1 if pHead2: head.next = pHead2 return res.next
这道题在剑指offer上也出现了,看到了新的解法,就是按照递归的方法进行解决问题。
代码:
# -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: # 返回合并后列表 def Merge(self, pHead1, pHead2): if not pHead1: return pHead2 if not pHead2: return pHead1 pHead = None if pHead1.val <= pHead2.val: pHead = pHead1 pHead.next = self.Merge(pHead1.next, pHead2) else: pHead = pHead2 pHead.next = self.Merge(pHead1, pHead2.next) return pHead