嗨,我的remove_rear()没有返回正确的值,我的想法是循环查找指向rear的节点,并将其设置为新的self._rear。
def remove_rear(self):
if self._length<2:
return None
elif self._length==1:
self._rear=temp
else:
temp=self._front
temp2=self._front.get_next()
while temp2!=None:
temp=temp.get_next()
temp2=temp2.get_next()
self._rear=temp
temp.set_next(None)
self._length-=1
return (temp.get_data())
在我的驱动程序中,当我删除rear,然后调用get_rear()时,节点仍然存在。
1条答案
按热度按时间atmip9wb1#
其中一些问题:
if
条件为真,列表中没有任何变化,但是需要删除一个节点...if
条件的条件永远不会为真,因为第一个if
块已经选择了这种情况(当长度为1时),函数在这里退出。此外,第二个if
块引用temp
,而它还没有被定义。else
部分中,temp
比temp2
晚一步,当temp2
为None
时,循环退出,因此,当循环退出时,temp2
将是后面的节点,这意味着这个循环没有任何意义,因为您已经知道后面的节点是什么:self._rear=temp
不会有任何影响,因为这两个值已经相等。循环应该少一次迭代。self._length-=1
仅在else
块中执行,但也应该在列表只有一个节点时执行。以下是对您的代码的更正: