我正在做一項任務,但進展并不順利。這是我的代碼運行不佳:
from dataclasses import dataclass
@dataclass
class Node:
value: int = None
nxt: Node = None
@dataclass
class Deque:
head: Node = None # First node in queue
tail: Node = None # Last node in queue
size: int = 0
def add_first(self, n):
new = Node(n, None)
if self.head is None:
self.head = new
self.tail = new
self.size = 1
s = "{ "
node = self.head
while node is not None:
s = str(node.value) " "
node = node.nxt
s = "}"
return s
def add_last(self, n):
new = Node(n, None)
if self.head is None:
self.head = new
self.tail = new
else:
self.tail.nxt = new
self.tail = new
self.size = 1
def get_last(self):
if self.tail is None:
print("Get can't be applied on an empty list")
return None
else:
return self.tail.value
def get_first(self):
if self.head is None:
print("Get can't be applied on an empty list")
return None
else:
#node = self.head
return self.head.value
def remove_first(self):
if self.head is None:
print("Remove can't be applied on an empty list")
elif self.head == self.tail:
s = self.head.value
self.head = None
self.tail = None
self.size -= 1
return s
elif self.size == 1:
node = self.head
self.head = self.head.nxt
self.size -= 1
return node.value
輸出:{ 1 2 3 4 5 6 7 8 9 10 } 尺寸:10 { 20 19 18 17 16 15 14 13 12 11 1 2 3 4 5 6 7 8 9 10 } 尺寸:20
更新:我找到了我的問題的答案。這是關于 def add_first 和 def remove last 以及 def remove first 的問題。
uj5u.com熱心網友回復:
因為這是作業,所以我不會放棄固定的代碼,但我會指出需要修復的地方。我相信我已經找到了所有必需的修復程式,但我可能是錯的,因為您沒有共享用于測驗您的 Deque 的代碼:
- 您的
add_first方法不必要地遍歷所有節點,然后將最后一個節點 (thetail) 的nxt值設定為新節點,這意味著新節點將出現在 Deque 的末尾。相反,您需要做的就是將nxt新節點的head設定head為當前,并設定為新節點。 - 您
remove_first不考慮任何情況,除非 Deque 中有一個節點。在所有其他情況下,您必須將 Deque 設定head為其舊head的nxtNode。 - 您
remove_last也不考慮任何情況,除非 Deque 中有一個節點。在所有其他情況下,您必須回圈遍歷 Deque 的節點,從 開始head,直到找到nxt值為 Deque 的Nodetail,然后將其設定nxt為 None,并將 Deque 設定tail為該節點。
在節點之前查找節點的示例tail:node = self.head while node.nxt != self.tail: node = node.nxt node.nxt = None self.tail = node
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/347333.html
下一篇:盤一盤Java中的abstract和interface(備戰2022春招或暑期實習,每天進步一點點,打卡100天,Day7)
