✔ 풀이
class MyCircularDeque(object):
def __init__(self, k):
self.maxlen, self.len = k, 0
self.head = ListNode(None)
self.tail = ListNode(None)
self.head.right, self.tail.left = self.tail, self.head
def _add(self, node, new):
n = node.right
node.right = new
n.left = new
new.left, new.right = node, n
def _del(self, node):
n = node.right.right
node.right = n
n.left = node
def insertFront(self, value):
if self.len == self.maxlen:
return False
self.len += 1
self._add(self.head, ListNode(value))
return True
def insertLast(self, value):
if self.len == self.maxlen:
return False
self.len += 1
self._add(self.tail.left, ListNode(value))
return True
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 -1 if self.len == 0 else self.head.right.val
def getRear(self):
return -1 if self.len == 0 else self.tail.left.val
def isEmpty(self):
return self.len == 0
def isFull(self):
return self.len == self.maxlen
✔ 풀이
import heapq
class Solution(object):
def mergeKLists(self, lists):
root = result = ListNode(None)
Q = []
for i, list in enumerate(lists):
if list:
heapq.heappush(Q, (list.val, i, list))
while Q:
node = heapq.heappop(Q)
idx = node[1]
result.next = node[2]
result = result.next
if result.next:
heapq.heappush(Q, (result.next.val, idx, result.next))
return root.next