Input: [ 1->4->5, 1->3->4, 2->6 ] Output: 1->1->2->3->4->4->5->6
合并链表很简单,而且还是有序的,k个指针前进就行。写代码的时候只要随时记得保持良好习惯,尽量用少量的判断来包括多种条件进去,这样写出来的代码就不会和严蔚敏的数据结构书上一样丑了。
# Definition for singly-linked list. # class ListNode(object): # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution(object): def mergeKLists(self, lists): """ :type lists: List[ListNode] :rtype: ListNode """ k_cursors = [i for i in lists if i ] result = ListNode() cursor = result while len(k_cursors) > 0: smallest = self.find_smallest_in_k_cursors(k_cursors) new_node = ListNode(smallest) cursor.next = new_node cursor = cursor.next result = result.next return result def find_smallest_in_k_cursors(self, k_cursors): smallest = float("inf") remeber_cursor = {} for i, k_cursor in enumerate(k_cursors): if k_cursors[i].val < smallest: smallest = k_cursors[i].val remeber_cursor[smallest] = i if not k_cursors[remeber_cursor[smallest]].next: k_cursors.pop(remeber_cursor[smallest]) else: k_cursors[remeber_cursor[smallest]] = k_cursors[remeber_cursor[smallest]].next return smallest