为什么两个代码看起来相同,但一个不起作用?Python 链表数据结构 2.



提前感谢您阅读问题。

我正在通过 Python 研究单个链表,下面有两个方法 pop((,pop1(( 困扰着我。

类节点(对象(:

def __init__(self, value):
self.value = value
self.next = None
def __repr__(self):
nval = self.value and self.next.value or None
return f"[{self.value}:{repr(nval)}]"

类 LinkedListController(对象(:

def __init__(self):
self.begin = None
# Appends new value at the end of the list
def push(self, obj):
if not self.begin:
self.begin = Node(obj)
else:
current_node = self.begin
while current_node.next:
current_node = current_node.next
current_node.next = Node(obj)
# Removes the last item and returns it
def pop(self):
if not self.begin:
return None
elif self.count() == 1:
value_to_return = self.begin.value
self.begin = None
return value_to_return
else:
current_node = self.begin.next
next_node = current_node.next
while next_node:
current_node = next_node
next_node = current_node.next
value_to_return = current_node.value
current_node = None
return value_to_return
def pop1(self):
if not self.begin:
return None
elif self.count() == 1:
value_to_return = self.begin.value
self.begin = None
return value_to_return
else:
r = self.begin
while r.next.next:
r = r.next
value_to_return = r.next.value
r.next = None
return value_to_return
# Counts the number of elements in the list
def count(self):
current_node = self.begin
count = 0
while current_node:
count = count + 1
current_node = current_node.next
return count

以下是测试代码:

from unittest import TestCase
from data_structure.single_linked_list_without_endnode import LinkedListController as node_controller

类 TestLinkedList(TestCase(:

def test_pop(self):
colors = node_controller()
colors.push("Magenta")
colors.push("Blaring Sun")
colors.push("White sand")
self.assertEquals(colors.pop(), "White sand")
self.assertEquals(colors.pop(), "Blaring Sun")
self.assertEquals(colors.pop(), "Magenta")
self.assertEquals(colors.pop(), None)
animals = node_controller()
animals.push("Dog")
animals.push("Cat")
animals.push("Cow")
self.assertEquals(animals.pop1(), "Cow")
self.assertEquals(animals.pop1(), "Cat")
self.assertEquals(animals.pop1(), "Dog")
self.assertEquals(animals.pop1(), None)

测试结果为:

回溯(最近一次调用(: 文件"C:\用户\戴尔\项目\data_structure\测试\test_single_linked_list_without_endnode.py",第 27 行,test_pop self.assertEquals(colors.pop((, "Blaring Sun"( AssertionError: 'White sand' != 'Blaring Sun' - 白沙 + 刺眼的太阳

pop(( 中的current_node = None部分似乎不起作用,因为它仍然在弹出最后一个元素,而它应该执行倒数第二个元素。

问:我在 pop(( 中使用引用的方式是否错误? 为什么只有 pop1(( 有效?

多谢

当你说current_node = None你只是重新分配一个局部变量时,它不会影响你的任何对象。

相应的行r.next = None更改变量r引用的任何对象。

相关内容

最新更新