面試18題:
題目:刪除鍊錶中的節點
題一:在o(1)時間內刪除鍊錶節點。給定單向鍊錶的頭指標和乙個節點指標,定義乙個函式在o(1)時間內刪除該節點。
解題**:
classlistnode:
def__init__
(self):
self.value =none
self.next_node =none
class
solution:
defdelete_node(self,head_node,del_node):
"""刪除指定節點
"""if
not (head_node and
del_node):
return
false
#要刪除的節點不是尾節點
ifdel_node.next_node:
del_next_node=del_node.next_node
del_node.value=del_next_node.value
del_node.next_node=del_next_node.next_node
del_next_node.value=none
del_next_node.next_node=none
#鍊錶只要乙個節點,刪除頭節點(也是尾節點)
elif del_node==head_node:
head_node=none
del_node =none
#鍊錶中有多個節點,刪除尾節點
else
: node=head_node
while node.next_node!=del_node:
node=node.next_node
node.next_node=none
del_node=none
return head_node
題目:刪除鍊錶中重複的節點。
題:在乙個排序的鍊錶中,請刪除重複的節點,如1-2-3-3-4-4-5在重複的節點被刪除後為1-2-5。
解題思路一:將鍊錶元素儲存在列表中,然後過濾掉出現次數大於1的值,只保留出現次數為1的值,再將新的列表建成鍊錶的形式。
解題**:
#-*- coding:utf-8 -*-
#class listnode:
#def __init__(self, x):
#self.val = x
#self.next = none
class
solution:
defdeleteduplication(self, phead):
#write code here
res=
while
phead:
phead=phead.next
res=list(filter(lambda c:res.count(c)==1,res))
newlist=listnode(0)
pre=newlist
for i in
res:
node=listnode(i)
pre.next=node
pre=pre.next
return
newlist.next
解題思路二:運用鍊錶的操作,確保將重複的節點略過,始終連線不重複的值。
解題**:
#-*- coding:utf-8 -*-
#class listnode:
#def __init__(self, x):
#self.val = x
#self.next = none
class
solution:
defdeleteduplication(self, phead):
#write code here
first=listnode(-1)
first.next=phead
last=first
while phead and
phead.next:
if phead.val ==phead.next.val:
val=phead.val
while phead and phead.val==val:
phead=phead.next
last.next=phead
else
: last=phead
phead=phead.next
return first.next
劍指offer 面試35題
面試35題 題目 複雜鍊錶的複製 題 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 解題思路一 python作弊法 解題 coding ...
劍指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就不可能是該壓棧序列的彈出...