面試35題:
題目:複雜鍊錶的複製
題:輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點),返回結果為複製後複雜鍊錶的head。(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)
解題思路一:「python作弊法」
解題**:
#-*- coding:utf-8 -*-
#class randomlistnode:
#def __init__(self, x):
#self.label = x
#self.next = none
#self.random = none
class
solution:
#返回 randomlistnode
defclone(self, phead):
#write code here
import
copy
return copy.deepcopy(phead)
解題思路二:分解法。詳見劍指offer p188
解題**:
#-*- coding:utf-8 -*-
#class randomlistnode:
#def __init__(self, x):
#self.label = x
#self.next = none
#self.random = none
class
solution:
#返回 randomlistnode
defclone(self, phead):
#write code here
if phead==none:
return
none
self.clonenodes(phead)
self.connectrandomnodes(phead)
return
self.reconnectnodes(phead)
defclonenodes(self,phead):
'''複製原始鍊錶的每個結點, 將複製的結點鏈結在其原始結點的後面
'''pnode=phead
while
pnode:
pcloned=randomlistnode(0)
pcloned.label=pnode.label
pcloned.next=pnode.next
pnode.next=pcloned
pnode=pcloned.next
defconnectrandomnodes(self,phead):
'''將複製後的鍊錶中的轉殖結點的random指標鏈結到被轉殖結點random指標的後乙個結點
'''pnode=phead
while
pnode:
pcloned=pnode.next
if pnode.random!=none:
pcloned.random=pnode.random.next
pnode=pcloned.next
defreconnectnodes(self,phead):
'''拆分鍊錶:將原始鍊錶的結點組成新的鍊錶, 複製結點組成複製後的鍊錶
'''pnode=phead
pclonedhead=pclonednode=pnode.next
pnode.next =pclonednode.next
pnode=pnode.next
while
pnode:
pclonednode.next=pnode.next
pclonednode=pclonednode.next
pnode.next=pclonednode.next
pnode=pnode.next
return pclonedhead
#-*- coding:utf-8 -*-
#class randomlistnode:
#def __init__(self, x):
#self.label = x
#self.next = none
#self.random = none
class
solution:
#返回 randomlistnode
defclone(self, phead):
#write code here
if phead==none:
return
none
newnode=randomlistnode(phead.label)
newnode.random=phead.random
newnode.next=self.clone(phead.next)
return newnode
劍指offer面試題35
面試題35 第乙個只出現一次的字元 題目 在字串中找出第乙個只出現一次的字元。如輸入 abaccdeff 則輸入 b 預備知識 什麼是雜湊表?思路 構造乙個簡單的基於陣列的簡單雜湊表 key 字元,value 次數 字元的ascii碼作為字元的下標,統計次數作為陣列值。演算法實現和測試 面試題35....
劍指offer 面試33題
面試33題 題 二叉搜尋樹的後序遍歷序列 題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。解題思路 遞迴 解題 coding utf 8 class solution defverifysquenceof...
劍指offer 面試31題
面試31題 題目 棧的壓入 彈出元素 題 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出...