<--- 리트코드 641. Design Circular Deque --->

# 문제: 다음 연산을 제공하는 원형 데크를 디자인하라.

 

# 풀이

1. 이중 연결 리스트를 이용한 데크 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
class MyCircularDeque:
 
    def __init__(self, k: int):
        """
        Initialize your data structure here. Set the size of the deque to be k.
        """
        self.head, self.tail = ListNode(None), ListNode(None)
        self.k, self.len = k, 0
        self.head.right, self.tail.left = self.tail, self.head
    
    #이중 연결 리스트에 신규 노드 삽입
    def _add(self, node: ListNode, new: ListNode):
        n = node.right
        node.right = new
        new.left, new.right = node, n
        n.left = new
        
    def _del(self, node:ListNode):
        n = node.right.right
        node.right = n
        n.left = node
        
 
    def insertFront(self, value: int-> bool:
        """
        Adds an item at the front of Deque. Return true if the operation is successful.
        """
        
        if self.len == self.k:
            return False
        self.len += 1
        self._add(self.head, ListNode(value))
        return True
        
        
 
    def insertLast(self, value: int-> bool:
        """
        Adds an item at the rear of Deque. Return true if the operation is successful.
        """
        
        if self.len == self.k:
            return False
        self.len += 1
        self._add(self.tail.left, ListNode(value))
        return True
        
 
    def deleteFront(self-> bool:
        """
        Deletes an item from the front of Deque. Return true if the operation is successful.
        """
        
        if self.len == 0:
            return False
        
        self.len -= 1
        self._del(self.head)
        return True
        
 
    def deleteLast(self-> bool:
        """
        Deletes an item from the rear of Deque. Return true if the operation is successful.
        """
        if self.len == 0:
            return False
        self.len -= 1
        self._del(self.tail.left.left)
        return True
        
 
    def getFront(self-> int:
        """
        Get the front item from the deque.
        """
        return self.head.right.val if self.len else -1
        
 
    def getRear(self-> int:
        """
        Get the last item from the deque.
        """
        return self.tail.left.val if self.len else -1
        
 
    def isEmpty(self-> bool:
        """
        Checks whether the circular deque is empty or not.
        """
        return self.len == 0
        
 
    def isFull(self-> bool:
        """
        Checks whether the circular deque is full or not.
        """
        return self.len == self.k
cs