메모리 상에 흩어져 있는 노드들을 포인터 참조로 연결하는 **단일 연결 리스트(Singly Linked List)**의 동작 원리와 파이썬 구현을 다룹니다.
1. 연결 리스트 용어 사전 (Glossary)
- Node (노드): 실제 데이터 값(
data)과 다음 노드의 메모리 참조 주소(next)를 담고 있는 연결 리스트의 기본 단위입니다. - Head Pointer: 연결 리스트의 첫 번째 노드를 가리키는 시작 포인터입니다.
- Non-contiguous Memory: 배열과 달리 메모리 상에 요소들이 연속 배치되지 않고 포인터로 연결된 구조적 특징입니다.
2. 파이썬 단일 연결 리스트 완벽 구현 코드
class Node:
def __init__(self, data):
self.data = data
self.next = None
class SinglyLinkedList:
def __init__(self):
self.head = None
def append(self, data):
new_node = Node(data)
if not self.head:
self.head = new_node
return
curr = self.head
while curr.next:
curr = curr.next
curr.next = new_node
def reverse(self):
prev = None
curr = self.head
while curr:
next_node = curr.next
curr.next = prev
prev = curr
curr = next_node
self.head = prev
def display(self):
elems = []
curr = self.head
while curr:
elems.append(str(curr.data))
curr = curr.next
print(" -> ".join(elems) + " -> None")
sll = SinglyLinkedList()
sll.append(10)
sll.append(20)
sll.append(30)
print("원래 연결 리스트:")
sll.display()
sll.reverse()
print("역순 뒤집기 후 연결 리스트:")
sll.display()