我目前正在學習 Python 中的數據結構,我正在嘗試創建一個鏈表。我得到了appendandget_size和display方法,但是當我嘗試創建一個remove方法時。它刪除了特定元素,但是當我嘗試再次使用該方法打印所有元素時display,它打印的是一個空列表。class Node: def __init__(self, data=None): self.data = data self.ref = None class Linked: def __init__(self): self.head = Node() self.size = 0 def append(self, data): new = Node(data) cur = self.head while cur.ref != None: cur = cur.ref cur.ref = new self.size += 1 def get_size(self): return self.size def display(self): el = [] cur_node = self.head while cur_node.ref !=None: cur_node = cur_node.ref el.append(cur_node.data) return el def remove(self, data): this_node = self.head prv_node = None while this_node != None: if data == this_node.data: if prv_node: prv_node.ref = this_node.ref else: self.head = this_node.ref self.size -= 1 return F"The item is removed " else: prev_node = this_node this_node = this_node.ref return F"data not found"
1 回答
呼喚遠方
TA貢獻1856條經驗 獲得超11個贊
始終引用節點的目的head是避免像remove. prev并且cur可以初始化為頭部,設置為循環頂部的cur節點。在循環底部更新。prevprev
def remove(self, data):
previous = self.head
while prev.ref is not None:
cur = prev.ref
if cur.data == data:
prev.ref = cur.ref # Cut out cur
self.size -= 1
return "The item is removed"
prev = cur
return "data not found"
在 Python 3.8 中,您可以使用運算符將賦值移動cur到循環條件中:=:
while (cur := prev.ref) is not None:
if cur.data == data:
...
另外,我鼓勵您不要返回特殊字符串來指示成功或失敗。其他一些選項:
True如果項目被移除則返回,False否則返回被刪除的節點,
None否則總是返回
None始終返回
None,但如果未找到要刪除的項目,則引發異常。
添加回答
舉報
0/150
提交
取消
