def __init__(self, nums): for i in range(len(nums)): num = nums[i] if self.__head is None: self.__tail = ListNode(num) self.__head = self.__tail else: self.__tail.next = ListNode(num) self.__tail = self.__tail.next
def mergeKLists(self, lists): fakeHead = ListNode(0) curr = fakeHead heap = [] for lst in lists: while lst: heapq.heappush(heap, lst.val) lst = lst.next while heap: curr.next = ListNode(heapq.heappop(heap)) curr = curr.next return fakeHead.next
def deleteDuplicates(self, head): if head is None or head.next is None: return head fakeHead = ListNode(0) fakeHead.next = head curr = fakeHead while curr.next is not None: nextNode = curr.next if nextNode.next is not None and nextNode.next.val == nextNode.val: while nextNode.next is not None and nextNode.next.val == nextNode.val: nextNode = nextNode.next curr.next = nextNode.next else: curr = curr.next return fakeHead.next
def deleteDuplicates(self, head): if (head is None) or (head.next is None): return head map = {} fakeHead = ListNode(0) fakeHead.next = head curr = fakeHead while curr.next is not None: if curr.next.val not in map: map[curr.next.val] = 1 curr = curr.next else: keep = curr.next.next curr.next = keep return fakeHead.next
def add_same_len(self,l1,l2): increase = 0 fakeHead = ListNode(0) curr = fakeHead while (l1 is not None) and (l2 is not None): sum = l1.val + l2.val + increase if sum >= 10: increase = sum // 10 value = sum % 10 else: value = sum increase = 0 curr.next = ListNode(value) curr = curr.next l1 = l1.next l2 = l2.next if increase == 1: curr.next = ListNode(1) return fakeHead.next
def extend_list(self,l1,len): if len == 0: return l1 curr = l1 while (curr is not None) and (curr.next is not None): curr = curr.next for i in range(len): curr.next = ListNode(0) curr = curr.next return l1
def mergeTwoLists(self, l1, l2): if l1 is None and l2 is None: return None elif l1 is None: return l2 elif l2 is None: return l1 else: fakeHead = ListNode(0) curr = fakeHead self.backTracking(curr, l1, l2) return fakeHead.next
def mergeKLists(self, lists): fakeNode = ListNode(0) self.backTracking(lists, fakeNode) return fakeNode.next