티스토리 뷰

간단하게 구현한 단방향 연결 리스트이다.

이렇게 아예 구현해놓고 문제를 푸는 게 삽입, 삭제, 조회 등을 추가하여 사용하기가 훨씬 편리할 거 같아서 작성했다.

class ListNode:
    def __init__(self, data):
        self.val = data
        self.next = None


class LinkedList:
    def __init__(self):
        head_node = ListNode(None)
        self.head = head_node
        self.tail = head_node
        self.num_of_data = 0

    def insert(self, data):
        insert_node = ListNode(data)
        self.tail.next = insert_node
        self.tail = insert_node
        self.num_of_data += 1

    def delete(self):
        if self.num_of_data == 0:
            print("empty")
            return False
        elif self.num_of_data == 1:
            delete_node = self.head.next
            self.head.next = None
            self.tail = self.head
            self.num_of_data -= 1
            print(delete_node.val, "데이터를 삭제하였습니다.")
            return delete_node.val
        else:
            delete_node = self.head.next
            self.head.next = self.head.next.next
            self.num_of_data -= 1
            print(delete_node.val, "데이터를 삭제하였습니다.")
            return delete_node.val

    def search(self, data):
        check = self.head
        for i in range(self.num_of_data):
            if check.next.val == data:
                print(data, "데이터의 위치: ", i + 1)
                return None
            check = check.next
        print(data, "데이터는 리스트에 없습니다.")
        return None

    def listNum(self):
        print(self.num_of_data)
        return self.num_of_data

    def printList(self):
        current = self.head
        if self.num_of_data == 0:
            print("empty")
            return None
        print(end='')
        for i in range(self.num_of_data - 1):
            print(current.next.val, "->", end='')
            current = current.next
        print(current.next.val)
Comments