剑指offer--day07
1.1 題目:反轉鏈表:輸入一個鏈表,反轉鏈表后,輸出新鏈表的表頭。
1.2 思路:這道題,我們要做到的是反轉鏈表,我們的思路是將前一個節(jié)點與后一個節(jié)點斷開,然后讓后一個節(jié)點指向前一個節(jié)點,這個過程就需要節(jié)點引用(可以理解為指針)來確定記錄當前操作節(jié)點的前一個節(jié)點和后一個節(jié)點。
1.3 代碼:
1 # -*- coding:utf-8 -*- 2 # class ListNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.next = None 6 class Solution: 7 # 返回ListNode 8 def ReverseList(self, pHead): 9 # write code here 10 if not pHead or not pHead.next: 11 return pHead 12 last = None 13 while pHead: 14 tmp = pHead.next 15 pHead.next = last 16 last = pHead 17 pHead = tmp 18 return last
?
2.1 題目:合并兩個排序列表:輸入兩個單調遞增的鏈表,輸出兩個鏈表合成后的鏈表,當然我們需要合成后的鏈表滿足單調不減規(guī)則。
2.2 思路:
先判斷輸入的鏈表是否為空的指針。如果第一個鏈表為空,則直接返回第二個鏈表;如果第二個鏈表為空,則直接返回第一個鏈表。如果兩個鏈表都是空鏈表,合并的結果是得到一個空鏈表。
兩個鏈表都是排序好的,我們只需要從頭遍歷鏈表,判斷當前指針,哪個鏈表中的值小,即賦給合并鏈表指針即可。使用遞歸就可以輕松實現。
2.3 代碼:
1 # -*- coding:utf-8 -*- 2 # class ListNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.next = None 6 class Solution: 7 # 返回合并后列表 8 def Merge(self, pHead1, pHead2): 9 # write code here 10 if not pHead1: 11 return pHead2 12 if not pHead2: 13 return pHead1 14 pMergeHead = None 15 if pHead1.val < pHead2.val: 16 pMergeHead = pHead1 17 pMergeHead.next = self.Merge(pHead1.next, pHead2) 18 else: 19 pMergeHead = pHead2 20 pMergeHead.next = self.Merge(pHead1, pHead2.next) 21 return pMergeHead
?
3.1 題目:樹的子結構:輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)
3.2 思路:要查找樹A中是否存在和樹B結構一樣的子樹,我們可以分為兩步:第一步在樹A中找到和B的根結點的值一樣的結點R,第二步再判斷樹A中以R為根節(jié)點的子樹是不是包含和樹B一樣的結構。這里使用遞歸的方法即可。
?
3.3 代碼:
1 # -*- coding:utf-8 -*- 2 # class TreeNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.left = None 6 # self.right = None 7 class Solution: 8 def HasSubtree(self, pRoot1, pRoot2): 9 # write code here 10 if pRoot1 == None or pRoot2 == None: 11 return False 12 return self.subtree(pRoot1, pRoot2) or self.HasSubtree(pRoot1.left, pRoot2) or self.HasSubtree(pRoot1.right, pRoot2) 13 def subtree(self, A, B): 14 if B == None: 15 return True 16 if A == None or A.val != B.val: 17 return False 18 return self.subtree(A.left, B.left) and self.subtree(A.right, B.right)
?
轉載于:https://www.cnblogs.com/WJZheng/p/11231052.html
總結
以上是生活随笔為你收集整理的剑指offer--day07的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Asp.Net MVC中设定site路
- 下一篇: Linux服务器安装配置JDK