我无法在给定的代码中获得所需的输出。代码是关于在循环单链接列表中插入节点的。请根据所述问题更正此代码
class Node:
def __init__(self,value):
self.value = value
self.next = None
class CircularSLL:
def __init__(self):
self.head = None
self.tail = None
def __iter__(self):
node = self.head
while node:
yield node
if node.next == self.head:
print('break')
break
node = node.next
def insertnode(self, value, location):
new_node = Node(value)
# check if head is None or not
if self.head is None:
self.head = new_node
self.tail = new_node
new_node.next = self.head
else:
# At the start
if location == 0:
new_node.next = self.head
self.head = new_node
self.tail.next = self.head
# At the end
elif location == -1:
new_node.next = self.tail.next
self.tail.next = new_node
self.tail = new_node
else:
# At specific location
temp_node = self.head
index = 0
while index < location - 1:
# node is the last element
if temp_node.next == self.head:
break
temp_node = temp_node.next
index += 1
next_node = temp_node.next
temp_node.next = new_node
new_node.next = next_node
if temp_node.next == self.head:
self.tail == temp_node
self.tail.next = self.head
return 'The node has been successfully inserted'
cll = CircularSLL()
cll.insertnode(1,0)
cll.insertnode(3, 1)
cll.insertnode(4, 2)
cll.insertnode(5, 3)
cll.insertnode(6, 4)
print([node.value for node in call])
输出=[1,3,4,5,6]
第一个问题-在索引='0'处插入时。
cll.insertnode(10,0)
输出=[10,1]
预期的
输出=[10,1,3,4,5,6]
第二个问题-放置位置时='-1'
cll.insertnode(30, -1)
输出=[1,30]
预期的
输出=[10,1,3,4,5,6,30]
在测试设置中,插入第一个节点后,
tail
永远不会被设置你的第一个问题是你有
self.tail == temp_node
而不是self.tail = temp_node
,所以让我们来解决这个问题。尽管如此,我们仍然没有得到预期的产出:[1, 3, 4, 5, 6]
下一个问题是,当您选中
if temp_node.next is self.head:
时,您已经将temp_node.next
设置为new_node
。它永远不会是self.head
。我相信您打算在此时检查new_node.next
,因为它现在是最后一个元素简单地替换
与
得到
输出:
[10, 1, 3, 4, 5, 6, 30]
我还在一些地方用
is
替换了==
,以便更清楚地测试身份而不是等价值相关问题 更多 >
编程相关推荐