Untitled
unknown
python
a month ago
2.3 kB
23
Indexable
Never
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)
Leave a Comment