zoukankan      html  css  js  c++  java
  • 剑指offer-25.合并两个排序列表

    1.递归法

     1 class Solution:
     2     # 返回合并后列表
     3     def Merge(self, pHead1, pHead2):
     4         # write code here
     5         if pHead1 == None:
     6             return pHead2
     7         if pHead2 == None:
     8             return pHead1
     9         pMergedHead = None
    10         if pHead1.val < pHead2.val:  #有递归,所以用if就可以比较依次所有元素,不用while
    11             pMergedHead = pHead1
    12             pMergedHead.next = self.Merge(pHead1.next, pHead2)  #pMergedHead可以将元素依次连接起来
    13         else:
    14             pMergedHead = pHead2
    15             pMergedHead.next = self.Merge(pHead1, pHead2.next)
    16         return pMergedHead

    2.指针法(非递归)

    class Solution:
        # 返回合并后列表
        def Merge(self, pHead1, pHead2):
            # write code here
            mergeHead = ListNode(90)  
            p = mergeHead
         while pHead1 and pHead2:
                if pHead1.val >= pHead2.val:
                    mergeHead.next = pHead2
                    pHead2 = pHead2.next
                else:
                    mergeHead.next = pHead1
                    pHead1 = pHead1.next
                      
                mergeHead = mergeHead.next   #写在if条件外,避免if和else里面重复写
            if pHead1:
                mergeHead.next = pHead1
            elif pHead2:
                mergeHead.next = pHead2
            return p.next

    3.自己写的,代码不够简洁,

     1 class Solution:
     2     # 返回合并后列表
     3     def Merge(self, pHead1, pHead2):
     4         # write code here
     5         p1 = pHead1
     6         p2 = pHead2
     7         if not pHead1 and not pHead2:
     8             return None
     9         if not pHead1 and pHead2:   #不要忘记考虑一个链表为空的情况
    10             return pHead2
    11         if pHead1 and not pHead2:
    12             return pHead1
    13         if pHead1.val <= pHead2.val:
    14             p = phead = pHead1
    15             p1 = pHead1.next
    16         else:
    17             p = phead = pHead2
    18             p2 = pHead2.next
    19 
    20         while  p1 and p2:
    21             if p1.val <= p2.val:
    22                 phead.next = p1
    23                 p1 = p1.next
    24             else:
    25                 phead.next = p2
    26                 p2 = p2.next
    27             phead = phead.next
    28         if p2:
    29             phead.next = p2
    30         if p1:
    31             phead.next = p1
    32         return p
  • 相关阅读:
    CF580B Kefa and Company 尺取法
    [USACO08OCT]牧场散步Pasture Walking BZOJ1602 LCA
    [USACO09FEB]改造路Revamping Trails 分层最短路 Dijkstra BZOJ 1579
    [USACO09OPEN]牛的数字游戏Cow Digit Game 博弈
    Codeforces 628F 最大流转最小割
    Codeforces 513D2 Constrained Tree
    Codeforces 1009G Allowed Letters 最大流转最小割 sosdp
    Codeforces 431E Chemistry Experiment 线段树 + 二分
    Codeforces 359E Neatness
    Codeforces 1045B Space Isaac
  • 原文地址:https://www.cnblogs.com/wanrongshu/p/12743368.html
Copyright © 2011-2022 走看看