스파르타 코딩클럽/2주차

연결 리스트 추가,삭제,삽입 구현

코딩쪼앙 2022. 3. 17. 21:21

노드를 추가하거나 삭제할 때 필요한 노드는 추가하거나 삭제하기 위한 index 보다 1 적은 위치가 필요하다

이전 노드의 다음 위치에 삽입 할 새 노드를  연결하고, 그 후 이전 노드의 다음노드를 새 노드의 다음 노드로 연결하여 데이터를 추가할 수 있고, index 번째 노드를 무시하고, 이전 노드와 이전 노드의 다음 노드를 이어 붙임으로써 노드를 삭제할 수 있다.

# 노드 생성 (데이터와 다음 정보를 표시)
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

# 연결리스트를 만들기 위해 head 정보를 먼저 선언 
class LinkedList:
    def __init__(self, data):
        self.head = Node(data)

# 데이터를 가장 마지막 자리에 추가하는 함수
    def append(self,data):
        cur = self.head
        while cur.next is not None:
            cur = cur.next
        cur.next = Node(data)

# index 번 째 노드를 반환하는 함수 (노드삽입,삭제에서 유용하게 사용) 
    def get_node(self,index):
        node = self.head
        cnt = 0
        while cnt < index :
            node = node.next
            cnt += 1
        return node

# index 번 째 노드에 입력받은 데이터를 추가해주는 함수
    def add_node(self,index,data):
        new_node = Node(data)
        if index == 0:
            new_node.next = self.head
            self.head = new_node
            return

        node = self.get_node(index - 1)
        next_node = node.next
        node.next = new_node
        new_node.next = next_node

# index 번 째 노드를 삭제하는 함수
    def delete_node(self,index):
        if index == 0:
            self.head = self.head.next
            return
        node = self.get_node(index - 1)
        node.next = node.next.next

# 노드의 데이터를 모두 출력하는 함수
    def printAll(self):
        cur = self.head
        while cur is not None:
            print(cur.data)
            cur = cur.next

linked_list = LinkedList(5)
linked_list.append(12)
linked_list.add_node(0, 3)
linked_list.printAll()
linked_list.delete_node(0)
linked_list.printAll()

의도한 바와 맞게 출력되는 것을 볼 수 있다.