다양한 링크드 리스트 구조
- 더블 링크드 리스트 기본구조
- 이중 연결 리스트라고도 함.
- 장점: 양방향으로 연결되어 있어서 노드 탐색이 양쪽으로 모두가능
- 단점: 이중 연결 리스트에는 일반적인 연결 리스트보다 포인터를 2배 더 많이 사용해야 하고, 구현이 복잡하다는 단점이 존재한다
class MakeNode:
def __init__(self, data, prev=None, next=None):
self.data = data
self.prev = prev
self.next = next
class Node:
def __init__(self, data):
self.head = MakeNode(data)
self.tail = self.head
def insert(self, data):
if self.head == None:
self.head = MakeNode(data)
else:
node = self.head
while node.next:
node = node.next
new_node = MakeNode(data)
node.next = new_node
new_node.prev = node
self.tail = new_node
def output(self):
node = self.head
while node:
print(node.data)
node = node.next
def search_from_head(self, data):
checked = False
if self.head == None:
return checked
node = self.head
while node:
if(node.data == data):
checked = True
return checked
else:
node = node.next
print(23)
return checked
def search_from_tail(self, data):
if self.head == None:
return False
node = self.tail
while node:
if(node.data == data):
return True
else:
node = node.prev
return False
def insert_before(self, data, before_data):
if self.head == None:
self.head = MakeNode(data)
return True
else:
node = self.tail
while node.data != before_data:
node = node.prev
if node == None:
return False
new_node = MakeNode(data)
before_node = node.prev
before_node.next = new_node
new_node.prev = before_node
new_node.next = node
node.prev = new_node
return True
node1 = Node(1)
node1.insert(2)
node1.insert(4)
node1.insert(5)
node1.insert_before(3,4)
node1.output()