Linked List는 Node라는 구조체가 연결되는 형식으로 데이터를 저장하는 자료구조이다. Node는 데이터 값과 next node의 주소값을 저장한다. Linked List는 메모리상에서는 비연속적으로 저장이되어 있지만, 각각의 node가 next node의 메모리 주소값을 가리킴으로써 논리적인 연속성을 가지게 된다.
class Node:
def __init__(self, value = 0, next = None):
self.value = value
self.next = next
# 노드 생성
first = Node(1)
second = Node(2)
third = Node(3)
# 노드 끼리 연결
first.next = second
second.next = third
first.value = 6
class Node:
def __init__(self, value=None):
self.value = value
self.next = None
def append(self, value):
new_node = Node(value)
if self.head is None:
self.head = new_node
else:
current = self.head
while current.next is not None:
current = current.next
current.next = new_node
def get(self, idx):
current = self.head
for i in range(idx):
if current is None:
raise IndexError("list index out of range")
current = current.next
return current.value
def insert(self, idx, value):
new_node = Node(value)
if idx == 0:
new_node.next = self.head
self.head = new_node
else:
current = self.head
for i in range(idx - 1):
if current is None:
raise IndexError("list index out of range")
current = current.next
new_node.next = current.next
current.next = new_node
def delete(self, idx):
if idx == 0:
self.head = self.head.next
else:
current = self.head
for i in range(idx - 1):
if current is None:
raise IndexError("list index out of range")
current = current.next
if current.next is None:
raise IndexError("list index out of range")
current.next = current.next.next
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
LinkedList 코드에는 딱 정해진 정답이 없다.