컴퓨터 프로그래밍/자료구조

자료구조_링크드리스트_7_삽입연산

깝돌이 2020. 5. 19. 20:26

두가지 경우가 있을 수 있습니다. 

1) 가장 마지막 순서에 삽입 할 때 입니다. 

- append 연산이랑 같습니다. 

2) 두 노드 사이에 삽입 할 때 입니다. 

 

class Node:
    """링크드 리스트의 노드 클래스"""
    def __init__(self, data):
        self.data = data # 노드가 저장하는 데이터
        self.next = None # 다음 노드에 대한 레퍼런스

class LinkedList:
    """링크드 리스트 클래스"""
    def __init__(self):
        self.head = None
        self.tail = None

    def insert_after(self, previous_node, data):
        '''링크드 리스트 주어진 노드위에 삽입 연산 메소드'''
        new_node= Node(data)

        #가장 마지막 순서에 삽입
        if previous_node is self.tail:
            self.tail.next = new_node
            new_node = self.tail
        #두 노드사이에 삽입
        else:
            new_node.next = previous_node.next
            previous_node.next = new_node

잘 구현이 되었는지 확인해 보겠습니다. 

새로운 링크드 리스트 생성
my_list = LinkedList()
#링크드 리스트에 데이터 추가
my_list.apppend(2)
my_list.apppend(3)
my_list.apppend(5)
my_list.apppend(7)

print(my_list)

#인덱스 2에 있는 노드 접근
node_2 = my_list.find_node_at(2)
#인덱스 2 뒤에 6 삽입

my_list.insert_after(node_2, 6)
print(my_list)

#헤드노드 접근
head_node = my_list.head
my_list.insert_after(head_node, 9)
print(my_list)