劍指offer 面試18題

2022-04-23 01:11:31 字數 2336 閱讀 7145

面試18題:

題目:刪除鍊錶中的節點

題一:在o(1)時間內刪除鍊錶節點。給定單向鍊錶的頭指標和乙個節點指標,定義乙個函式在o(1)時間內刪除該節點。

解題**:

class

listnode:

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就不可能是該壓棧序列的彈出...