파이썬

[자료구조] Python으로 linked list 구현하기

Mara7 2023. 5. 2. 19:59
LIST
class Node: # 노드 정의
    def __init__(self, value):
        self.value = value
        self.next = None

class LinkedList: # 링크드리스트 정의
    def __init__(self):  # 초기화
        self.head = None  # 링크드리스트의 맨 앞
        self.tail = None  # 링크드리스트의 맨 뒤
        self.current = None  # 링크드리스트의 현재값
        self.before = None  # 링크드리스트의 현재값의 전 값

    def move_next(self):  # 다음으로 이동하는 기능
        if self.current.next is None: # 지금값을 가리키는 다음 값이 none이면 none 출력
            return None # none 출력
        else:
            self.before = self.current
            self.current = self.current.next
            return self.current.next.value

    def get(self):  # 현재 값을 가져오는 기능
        if self.current.value is None:
            return None
        else:
            return self.current.value

    def add(self, value):  # 현재 위치의 값을 추가하는 기능 현재값은 뒤로 감
        new_node = Node(value)
        if self.head is None: # 첫번재 값이 없다면
            self.head = new_node # 맨앞의 값이 지금 값
            self.tail = new_node # 맨 뒤에 값도 지금 값
            self.current = new_node # 현재값도 지금 값
        else: # 아니다. 앞에 있따. 이 값에 뒤에 값 추가
            new_node.next = self.current # 현재 값의 다음 값은 지금 값의 다음 값
            self.current.next = new_node
            self.before = self.current.value

    def delete(self):  # 현재 위치의 값을 삭제하는 기능
        if self.current is None:
            return None
        elif self.current == self.head:
            self.head = self.current.next

    def move_front(self):  # 맨처음으로 이동
        self.current = self.head
        self.before = None


lst = LinkedList()
lst.add(1)
print(lst.get())  # 3
lst.add(2)
lst.move_next()
print(lst.get())
lst.add(3)
lst.move_next()
print(lst.get())
lst.move_front()
print(lst.get())

 

반응형
LIST