我目前正在学习 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
提交
取消