【发布时间】:2020-12-15 13:07:08
【问题描述】:
我很难尝试在队列类中创建一个函数来删除某个节点,参数是节点的值。
class LinkedQ:
def __init__(self):
self._first = None
self._last = None
def enqueue(self,x):
ny = Node(x)
if self._first == None:
self._first = ny
self._last = ny
else:
self._last.next = ny
self._last = ny
def remove(self,x):
current_node = self._first
while x != current_node.data: #Node(x):
last_node = current_node
current_node = current_node.next
if current_node == Node(x):
last_node.next = current_node.next
return
def display(self):
if self._first == None:
return None
else:
elements = []
current_node = self._first
elements.append(current_node.data)
while current_node.next != None:
current_node = current_node.next
elements.append(current_node.data)
print(elements)
class Node:
def __init__(self, x, next = None):
self.data = x
self.next = next
p = LinkedQ()
p.enqueue(1)
p.enqueue(2)
p.enqueue(3)
p.enqueue(4)
p.enqueue(5)
p.display()
p.remove(3)
p.display()
所以我似乎无法使用函数def remove(self,x)。因为现在我没有收到错误消息,但使用def display(self): 的输出仍然相同:
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
表示所选节点尚未删除。 有人可以告诉我我做错了什么吗?而我该如何解决呢? 如您所见,我试图通过将前一个节点的指针更改为指向位于我们当前节点之后的节点来解决它,使其消失当没有任何东西指向它时。这就是我们需要解决的方法。
PS。代码中还有其他函数,例如 enqueue() 和 isEmpty(),但在本例中这些函数不相关,它们现在可以正常工作。
【问题讨论】:
-
您的 enqueue 方法是否创建 Node 对象?因为目前您正在排队整数而不是 Node 对象。此外,您的删除方法似乎没有正确缩进。
-
实际查看您的入队方法可能是相关的。它在创建 Node 对象时是否指定了下一个参数?还是 next 总是保留默认的 None 值?
-
您好,它的缩进是正确的,但是当我在这里复制和粘贴时显然搞砸了。是的,它确实创建了 Node 对象,如您在此处看到的:imgur.com/vGt5mjs 并且在上面的代码中,我还编辑了包含 enqueue()
标签: python class linked-list