Doubly Linked List(더블 링크드 리스트, 양방향 연결 리스트)
- 양방향으로 연결되어 있어서 노드 탐색이 양쪽으로 모두 가능
Doubly Linked List 특징
- 처음과 끝에 dummy node를 둔 구조
- 데이터를 담고 있는 node들이 모두 같은 구조
Doubly Linked List 구현 with Python
class Node:
def __init__(self, data, prev=None, next=None):
self.prev = prev
self.data = data
self.next = next
class NodeMgmt:
def __init__(self, data):
self.head = Node(data)
self.tail = self.head
def insert_before(self, data, before_data):
if self.head == None:
self.head = Node(data)
return True
else:
node = self.tail
while node.data != before_data:
node = node.prev
if node == None:
return False
new = Node(data)
before_new = node.prev
before_new.next = new
new.next = node
return True
def insert_after(self, data, after_data):
if self.head == None:
self.head = Node(data)
return True
else:
node = self.head
while node.data != after_data:
node = node.next
if node == None:
return False
new = Node(data)
after_new = node.next
new.next = after_new
new.prev = node
node.next = new
if new.next == None:
self.tail = new
return True
def insert(self, data):
if self.head == None:
self.head = Node(data)
else:
node = self.head
while node.next:
node = node.next
new = Node(data)
node.next = new
new.prev = node
self.tail = new
def desc(self):
node = self.head
while node:
print (node.data)
node = node.next
node_mgmt = Nodemgmt(0)
for data in range(1, 10):
node_mgmt.insert(data)
node_mgmt.desc()
node_mgmt.insert_after(1.5, 1)
node_mgmt.desc()
0
1
2
3
4
5
6
7
8
9
0
1
1.5
2
3
4
5
6
7
8
9