#-*-Coding:utf8-*-
‘‘‘
__author__ = ' [email protected] '
23:merge k Sorted Lists
https://oj.leetcode.com/problems/merge-k-sorted-lists/
Merge K sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
===comments by dabay===
Recursion: Each time the lists binary, respectively processing the left and right two sub lists, and then merge. The same algorithm as the merge sort.
Time complexity of NLGN
‘‘‘
# Definition for singly-linked list.
Class ListNode:
def __init__ (self, x):
Self.val = X
Self.next = None
Class Solution:
# @param a list of ListNode
# @return A ListNode
def mergeklists (self, lists):
def merge (Node1, Node2):
Head = node = ListNode (0)
While Node1 and Node2:
If Node1.val < node2.val:
Node.next = Node1
Node1 = Node1.next
Else
Node.next = Node2
Node2 = Node2.next
node = Node.next
If Node1:
Node.next = Node1
Elif Node2:
Node.next = Node2
Return Head.next
If len (lists) = = 0:
Return None
If len (lists) = = 1:
return Lists[0]
If len (lists) = = 2:
Return merge (Lists[0], lists[1])
Node1 = Self.mergeklists (Lists[:len (lists)/2])
Node2 = Self.mergeklists (Lists[len (lists)/2:])
Return merge (Node1, Node2)
def main ():
s = solution ()
LN1 = ListNode (1)
Ln1.next = ListNode (10)
LN2 = ListNode (2)
Ln2.next = ListNode (20)
node = s.mergeklists ([Ln1, LN2])
While node:
Print "%s->"% node.val,
node = Node.next
Print "None"
if __name__ = = "__main__":
Import time
Start = Time.clock ()
Main ()
Print "%s sec"% (Time.clock ()-start)
[Leetcode] [Python]23:merge k Sorted Lists