<--- 리트코드 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 |
'Python' 카테고리의 다른 글
파이썬 알고리즘 인터뷰 -29. 보석과 돌 (0) | 2022.01.25 |
---|---|
파이썬 알고리즘 인터뷰 - 27. k개 정렬 리스트 병합 (0) | 2022.01.25 |
파이썬 알고리즘 인터뷰 - 25. 원형 큐 디자인 (0) | 2022.01.24 |
파이썬 알고리즘 인터뷰 - 24. 스택을 이용한 큐 구현 (0) | 2022.01.24 |
파이썬 알고리즘 인터뷰 - 23. 큐를 이용한 스택 구현 (0) | 2022.01.24 |