我正在處理 GeeksForGeeks 問題Delete node in Double Linked List:
給定一個雙向鏈表和一個位置。任務是從雙向鏈表中的給定位置洗掉一個節點。
你的任務:
任務是完成
deleteNode()洗掉給定位置的節點并回傳鏈表頭的功能。
我的代碼:
def deleteNode(self,head, x):
# Code here
temp=head
count_of_nodes=0
prev_of_delete_node=None
next_of_delete_node=None
while temp != head:
count_of_nodes =1
if count_of_nodes==x:
prev_of_delete_node=temp.prev
next_of_delete_node=temp.next
#print(y.data,z.data)
prev_of_delete_node.next=next_of_delete_node
next_of_delete_node.prev=prev_of_delete_node
break
temp=temp.next
if x==1:
head=next_of_delete_node
執行上述代碼后,對雙重 LinkedList 沒有影響。為什么是這樣?
uj5u.com熱心網友回復:
一些問題:
條件錯誤:立即為假,因此
while回圈不會執行。的值
prev_of_delete_node可能是None當您使用 取消參考它時prev_of_delete_node.next。因此,請注意該操作。對next_of_delete_node.該函式不回傳任何內容,但它應該在洗掉后回傳串列的頭部
更正:
def deleteNode(self,head, x):
temp=head
count_of_nodes=0
prev_of_delete_node=None
next_of_delete_node=None
while temp: # Corrected loop condition
count_of_nodes =1
if count_of_nodes==x:
prev_of_delete_node=temp.prev
next_of_delete_node=temp.next
if prev_of_delete_node: # Guard
prev_of_delete_node.next=next_of_delete_node
if next_of_delete_node: # Guard
next_of_delete_node.prev=prev_of_delete_node
break
temp=temp.next
# Should return:
if x==1:
return next_of_delete_node
return head
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/429186.html
標籤:python-3.x 链表 双向链表
