코드 전문은 Do it! 자료구조와 함께 배우는 알고리즘 입문 파이썬 편에서 확인할 수 있다.
class Node:
def __init__(self, data, next):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.no = 0
self.head = None
self.current = None
def __len__(self):
return self.no
def search(self, data):
cnt = 0
ptr = self.head
while ptr is not None:
if ptr.data == data:
self.current = ptr
return cnt
cnt += 1
ptr = ptr.next
return -1
def __contains__(self, data):
return self.search(data) >= 0
def add_first(self, data):
ptr = self.head
self.head = self.current = Node(data, ptr)
self.no += 1
def add_last(self, data):
if self.head is None:
self.add_first(data)
else:
ptr = self.head
while ptr.next is not None:
ptr = ptr.next
ptr.next = self.current = Node(data, None)
self.no += 1
def add_at(self, index, data):
if index < 0 or index > self.no:
raise IndexError
if index == 0:
self.add_first(data)
else:
ptr = self.head
for _ in range(index - 1):
ptr = ptr.next
ptr.next = self.current = Node(data, ptr.next)
self.no += 1
def remove_first(self):
if self.head is not None:
self.head = self.current = self.head.next
self.no -= 1
def remove_last(self):
if self.head is not None:
if self.head.next is None:
self.remove_first()
else:
ptr = self.head
pre = self.head
while ptr.next is not None:
pre = ptr
ptr = ptr.next
pre.next = None
self.current = pre
self.no -= 1
def remove(self, p):
if self.head is not None:
if p is self.head:
self.remove_first()
else:
ptr = self.head
while ptr.next is not p:
ptr = ptr.next
if ptr is None:
return
ptr.next = p.next
self.current = ptr
self.no -= 1
def remove_current_node(self):
self.remove(self.current)
def clear(self):
while self.head is not None:
self.remove_first()
self.current = None
self.no = 0
def next(self):
if self.current is None or self.current.next is None:
return False
self.current = self.current.next
return True
def print_current_node(self):
if self.current is None:
print("주목 노드가 존재하지 않습니다.")
else:
print(self.current.data)
def print(self):
ptr = self.head
while ptr is not None:
print(ptr.data)
ptr = ptr.next
def __iter__(self):
return LinkedListIterator(self.head)
class LinkedListIterator:
def __init__(self, head):
self.current = head
def __iter__(self):
return self
def __next__(self):
if self.current is None:
raise StopIteration
else:
data = self.current.data
self.current = self.current.next
return data
'CS > Python' 카테고리의 다른 글
| 파이썬으로 이진 탐색 트리 구현하기 (0) | 2025.03.27 |
|---|---|
| 파이썬으로 분할 정복을 이용한 정렬 구현하기 (0) | 2025.03.25 |
| 파이썬으로 큐 구현하기 (0) | 2025.03.25 |
| 파이썬으로 스택 구현하기 (0) | 2025.03.25 |
| 파이썬으로 해시 테이블 구현하기 (0) | 2025.03.24 |