CS/Data Structure
Linked list (python으로 구현 해보기)
정요한
2022. 1. 17. 19:12
- 자료구조/알고리즘 강의 1주차
연결리스트란?
각 원소(node)의 head에는 data를 저장하고, next에는 원소가 연결되어 있다면 다음 원소의 head 주소를 저장하여 접근 할 수 있게한 일종의 비엔나 소시지 같은 느낌이라고 보면 되겠다.
[출처-파이썬알고리즘 인터뷰]
# 노드 선언
class Node:
def __init__(self, val):
self.val = val
self.next = None
# 리스트 선언
class L_List:
def __init__(self):
self.head = None
self.length = 0
이런식으로 node=[val][next] 꼴로 구현해 주었고, next = None인 이유는 연결하지 않은 노드 상태이기 때문.
만약 node를 n개 생성하여 node1 뒤로 node2를 연결시킨다면 node1.next = node2.head ... 인 형식이 될것이고, node1 앞으로 node2를 연결 시킨다면 node2.next=node1.head ... 이런식으로 나오게 함수를 정의하면 된다.
# 노드가 없을경우에 예외처리
def isempty(self):
return not bool(self.head)
# 가장 앞의 노드에 삽입
def add_front(self, val):
node = Node(val)
if not self.isempty():
node.next = self.head
self.head = node
else: #첫 node일경우 들어감.
self.head = node
self.length += 1
# 가장 뒤의 노드에 삽입
def add_end(self, val):
if not self.isempty():
node = self.head
while node.next:
node = node.next
node.next = (Node(val))
else:
self.head = Node(val)
self.length += 1
마지막으로 직접 node value를 확인해 보는 함수를 정의해서 테스트까지 해보았다.
def printnode(self):
if not self.isempty():
node = self.head
while node:
print(node.val, end=' ')
node = node.next
print()
else:
print('list is empty')
if __name__ == '__main__':
list = L_List()
list2 = L_List()
list.add_front(1)
list.add_end(2)
list.add_end(4)
list.printnode()
list2.add_front(1)
list2.add_end(3)
list2.add_end(4)
list2.printnode()
reference)