노드를 추가하거나 삭제할 때 필요한 노드는 추가하거나 삭제하기 위한 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()

의도한 바와 맞게 출력되는 것을 볼 수 있다.
'스파르타 코딩클럽 > 2주차' 카테고리의 다른 글
| 배달 가능 여부 출력하기 (0) | 2022.03.24 |
|---|---|
| 뒤에서 k번째 노드 값(data) 출력하기 (0) | 2022.03.24 |
| 이진 탐색 구현하기 (0) | 2022.03.18 |
| 연결 리스트 합 구하기 (0) | 2022.03.17 |