minimanimoh / Udacity_DS-A

0 stars 0 forks source link

DS&A - 2. Data Structures - Lesson 2. Implement a Stack Using a Linked List #15

Open minimanimoh opened 3 years ago

minimanimoh commented 3 years ago

Add the Node class here

class Node:
    def __init__(self, value):
        self.value = value
        self.next = None

Create the Stack class and its init method

class Stack:
    def __init__(head):
        self.head = None
        self.num_elements = 0

Add the push method

    def push(self, value):
        new_node = Node(value)

        # if stack is empty
        if self.head is None:
            self.head = new_node

        # 1) when add it to the tail
        else:
            current_node = head
            while current_node.next:
                current_node = current_node.next
            current_node.next = new_node

        # 2) when add it to the head
        else:
            new_node.next = self.head
            self.head = new_node

        self.num_lements += 1
minimanimoh commented 3 years ago

F794E651-1F27-4198-B7A4-657947A1D43A

minimanimoh commented 3 years ago

current_node = current_node.next 줄 이 필요한 이유? current_node.next가 계속 추가되는 node를 의미하는데 이 것이 tail에 배치될 것이라는 뜻.

같은 의미로, new_node.”next” 라고 써주는 이유? 새로운 node들이 head에 배치될 것이라는 뜻

minimanimoh commented 3 years ago
    def pop(self, value):
        if is_empty() is None:
            return None

        value = self.head.value
        self.head = self.head.next
        self.num_elements -= 1
        return value

    def size(self):
        return self.num_elements

    def is_empty(self):
        return self.num_elements == 0
minimanimoh commented 3 years ago
if self.num_elements == 0:
   return True
else:
   return False

라고 할 필요 없음

minimanimoh commented 3 years ago

else you can use below

class Stack:
    def __init__(self):
        self.items = []

    def size(self):
        return len(self.items)

    def push(self, item):
        self.items.append(item)

    def pop(self):
        if self.size()==0:
            return None
        else:
            return self.items.pop()
minimanimoh commented 3 years ago

내 질문: 여기서 if 구문 다음에 else를 쓰지 않고 그냥 if 구문과 같은 Indent로 해준 이유는 무엇인가요? else로 받는 경우에는 어떤 문제가 생겨서 인가요?

minimanimoh commented 3 years ago

답변: else 쓰셔도 됩니다. 다만 self.is_empty(): 밑에 return 이 "없는" 경우에는 무조건 else 넣어야합니다