from typing import Self


class SinglyNode:
    def __init__(self, value, nex: Self | None):
        self.value = value
        self.next = nex

    def __repr__(self):
        return f'Node({self.value})'

class SinglyLinkList:

    __string = ''

    def __init__(self):
        self.size = 0
        self.head: SinglyNode | None = None

    def __repr__(self):
        return self.__string

    def is_empty(self) -> bool:
        return self.size == 0

    # 新节点总是添加到头部
    def push(self, value):
        if self.head is None:
            self.__string = f'{value} -> None'
        else:
            self.__string = f'{value} -> ' + self.__string
        node = SinglyNode(value, self.head)
        self.head = node
        self.size += 1

    def pop(self) -> SinglyNode:
        head = self.head
        node = self.head.next
        self.head = node
        return head

    def peek(self):
        return self.head.value

    def iter(self):
        cur = self.head
        while cur:
            yield cur.value
            cur = cur.next