Untitled
unknown
python
a year ago
2.3 kB
28
Indexable
class Node: # node 정의
def __init__(self, num, prev=None, nxt=None):
self.num = num
self.prev = prev
self.nxt = nxt
class Dll: # Doubly linked list
def __init__(self, lst=None):
self.head = None
self.tail = None
if lst is not None:
for num in lst:
self.insert_tail(num)
def insert_tail(self, num): # tail에 넣기
new_node = Node(num)
if not self.tail:
# 리스트가 비어 있을 때
self.head = new_node
self.tail = new_node
else:
# 리스트에 노드가 있을 때
new_node.prev = self.tail
self.tail.nxt = new_node
self.tail = new_node
def insert_head(self, num): # head에 넣기
new_node = Node(num)
if not self.head:
# 리스트가 비어 있을 때
self.head = new_node
self.tail = new_node
else:
# 리스트에 노드가 있을 때
new_node.nxt = self.head
self.head.prev = new_node
self.head = new_node
def delete_head(self): # head element 지우기
if not self.head:
return # 리스트가 비어 있음
# now it is not empty
if self.head == self.tail:
# 리스트에 노드가 하나만 있을 때 <=> head = tail
self.head = None
self.tail = None
else:
# 리스트에 노드가 여러 개 있을 때 <=> head!=tail
self.head = self.head.nxt
self.head.prev = None
def delete_tail(self): # tail을 지우기 := head 방향 반대로
if not self.tail:
return
if self.tail == self.head:
self.head = None
self.tail = None
else:
# 리스트에 노드가 여러 개 있을 때
self.tail = self.tail.prev
self.tail.nxt = None
def __str__(self):
# 리스트의 모든 노드를 문자열로 반환
current = self.head
nodes = []
while current != None:
nodes.append(str(current.num))
current = current.nxt
return ' '.join(nodes)Editor is loading...
Leave a Comment