다음 연산을 제공하는 원형 데크를 디자인하라.
class MyCircularDeque:
def __init__(self,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, new):
n = node.right
node.right = new
new.left, new.right = node , n
n.left = new
def _del(self,node):
n = node.right.right
node.right = n
n.left = node
def insertFront(self,value):
if self.len == self.k:
return False
self.len += 1
self._add(self.head, ListNode(value))
return True
def insertLast(self,value):
if self.len == self.k:
return False
self.len +=1
self._add(self.tail.left, ListNode(value))
def deleteFront(self):
if self.len == 0:
return False
self.len -= 1
self._del(self.head)
return True
def deleteLast(self):
if self.len == 0 :
return False
self.len -= 1
self._del(self.tail.left.left)
return True
def getFront(self):
return self.head.right.val if self.len else -1
def getRear(self):
return self.tail.left.val if self.len else -1
def isEmpty(self):
return self.len == 0
def isFull(self):
return self.len == self.k
k개의 정렬된 리스트를 1개의 정렬된 리스트로 병합하라.
def mergeKLists(self,lists):
root = result = ListNode(None)
heap = []
# 각 연결 리스트의 루트를 힙에 저장
for i in range(len(lists)):
if lists[i]:
heapq.heappush(heap, (lists[i].val, i , lists[i]))
# 힙 추출 이후 다음 노드는 다시 저장
while heap :
node = heapq.heappop(head)
idx = node[1]
result.next = node[2]
result = result.next
if result.next:
heapq.heappush(heap, (result.next.val, idx, result.next))
return root.next