Untitled

mail@pastecode.io avatar
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