これは私のスタック実装です。破壊的なスタック反復
class Stack:
def __init__(self):
self.head = None
self.size = 0
def push(self, item):
node = Node(item)
if not self.head:
self.head = node
else:
node.next = self.head
self.head = node
self.size += 1
def pop(self):
if self.size == 0:
raise ValueError('Popping off an empty stack!')
item = self.head.val
self.head = self.head.next
return item
def peek(self):
if self.size == 0:
raise ValueError('Peeking into an empty stack!')
return self.head.val
def __iter__(self):
return self
def __next__(self):
if self.head:
curr = self.head
else:
raise StopIteration()
self.head = self.head.next
return curr.val
class Node:
def __init__(self, val):
self.val = val
self.next = None
if __name__ == '__main__':
stack = Stack()
stack.push(12)
stack.push(13)
stack.push(9)
for item in stack:
print(item)
print(stack.peek())
この問題は繰り返しです。反復は破壊的であり、反復の終了時にピークを呼び出すとエラーがスローされます。
return self.head.val AttributeError: 'NoneType' object has no attribute 'val'
反復を非破壊的にするにはどうすればよいですか?スタックを反復し
おかげで、それは私のものよりも堅牢なので、本当に、あなたはおそらく、ティムやダニエルのいずれかのソリューションを受け入れる必要があります(ただし:
ところで、あなたは少しその
push
方法を最適化することができます私のことを少し理解しやすいと思います)。 –