在給定的代碼中,我無法獲得理想的輸出。這段代碼是關于在環形單鏈表中插入節點。請根據所述問題糾正這段代碼。
output = [1,3,4,5,6 ] 第一個問題--在index = '0'處插入時。 輸出 = [10,1] 預計 輸出 = [10,1,3,4,5,6]/p>
第二個問題--當把location = '-1' 輸出 = [1, 30] 預期 輸出 = [10,1,3,4,5,6,30]/p>
uj5u.com熱心網友回復: 在你的測驗設定中, 你的第一個問題是你有 下一個問題是,當你檢查 簡單地替換 與 為了獲得 輸出。
我還在一些地方用
標籤:class Node:
def __init__(self,value)。
self.value = value
self.next = None: self.value = value。
class CircularSLL。
def __init__(self):
self.head = None.
self.tail = None: self.tail = None.
def __iter__(self):
node = self.head
while node:
yield node
if node.next == self.head。
print('break')
break
node = node.下一個
def insertnode(self, value, location)。
new_node = Node(value)
# check if head is None or not: new_node = Node(value)
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:
# 節點是最后一個元素。
if temp_node.next == self.head。
break
temp_node = temp_node.next break
index =1
next_node = temp_node.next[/span]。
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 '該節點已成功插入'。
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] )
cll.insertnode(10, 0)
cll.insertnode(30, -1)
tail在第一個節點被插入后從未被設定。
(Pdb) [c.value for c in cll]
[1, 3, 4, 5, 6]
(Pdb) cll.head.value
1]。
(Pdb) cll.tail.value
1 (Pdb)
(Pdb) cll.head is cll.tail
True (Pdb)
self.tail == temp_node,而不是self.tail = temp_node,所以讓我們來修復它。但是,我們仍然沒有得到預期的輸出:[1,2,3,4,5,6,7,8,9]。
[1, 3, 4, 5, 6]if temp_node.next is self.head:時,你已經將temp_node.next設定為new_node。它將永遠不會是self.head。我相信你打算在這一點上檢查new_node.next,因為它現在是最后一個元素。
if temp_node.next == self.head:
self.tail == temp_node
self.tail.next = self.head
if new_node.next is self.head:
self.tail = new_node
class Node。
def __init__(self,value)。
self.value = value
self.next = None: self.value = value。
class CircularSLL。
def __init__(self):
self.head = None.
self.tail = None: self.tail = None.
def __iter__(self):
node = self.head
while node:
yield node
if node.next is self.head。
break
node = node.下一個。
def insertnode(self, value, location)。
new_node = Node(value)
# check if head is None or not: new_node = Node(value)
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:
# 節點是最后一個元素。
if temp_node.next is self.head:
break
temp_node = temp_node.next
index =1
next_node = temp_node.next[/span]。
new_node.next = next_node
temp_node.next=new_node
if new_node.next is self.head。
self.tail = new_node
return '該節點已成功插入'。
cll = CircularSLL()
cll.insertnode(1,0)
cll.insertnode(3, 1)
cll.insertnode(4, 2)
cll.insertnode(5, 3)
cll.insertnode(6, 4)
cll.insertnode(10,0)
cll.insertnode(30, -1)
print([node.value for node in cll] )
[10, 1, 3, 4, 5, 6, 30] is代替了==,以便更清楚地測驗身份而不是等值。
