LinkedDeque的remove_rear函数异常:返回值错误且尾节点未正确移除
问题分析与修复方案
存在的错误点
- 未定义变量错误:
elif self._length==1分支中,temp未初始化就赋值给self._rear,会直接抛出NameError,且完全没有处理长度为1时的尾节点移除逻辑。 - 遍历逻辑错误:
else分支的循环最终让temp指向了原尾节点,而非倒数第二个节点。此时设置self._rear=temp等于没更新尾节点,原尾节点自然不会被移除,get_rear()返回的还是旧值。
修复后的代码
def remove_rear(self): # 空链表直接返回None if self._length == 0: return None # 处理长度为1的情况 elif self._length == 1: rear_data = self._rear.get_data() self._front = None self._rear = None self._length = 0 return rear_data # 处理长度大于1的情况 else: temp = self._front # 遍历找到倒数第二个节点 while temp.get_next() != self._rear: temp = temp.get_next() # 保存原尾节点数据 rear_data = self._rear.get_data() # 更新尾节点并断开原尾节点的连接 self._rear = temp temp.set_next(None) self._length -= 1 return rear_data
修复说明
- 补全空链表的判断,避免逻辑漏洞。
- 长度为1时,正确保存原尾节点数据,重置链表头尾指针并更新长度,确保链表清空。
- 调整遍历逻辑,直接通过
temp.get_next() != self._rear定位到倒数第二个节点,无需额外变量,逻辑更清晰准确。 - 正确保存并返回原尾节点的数据,同时断开原尾节点的引用,确保其被有效移除。
内容的提问来源于stack exchange,提问作者not_jena
相关产品推荐
相关产品推荐

