23.合并k个排序链表

题目:

合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6

思路:

我的思路就是把所有的遍历一遍,存到list里面,然后sort,再建立一个新的listNode返回给他,时间复杂度应该就是排序了,O(nlgn).

代码如下:


# encoding: utf-8

"""
@author: alery
@file: 23. 合并K个排序链表.py
@time: 2018/8/8 17:28
"""


# Definition for singly-linked list.
class (object):
def __init__(self, x):
self.val = x
self.next = None


class Solution(object):
def mergeKLists(self, lists):
"""
:type lists: List[ListNode]
:rtype: ListNode
"""
res = []
for i in lists:
while i:
res.append(i.val)
i = i.next
res.sort()
head = ListNode(0)
p = head
for i in res:
t = ListNode(i)
p.next = t
p = p.next
return head.next

def main():
a = ListNode(1)
a.next = ListNode(4)
a.next.next = ListNode(5)

b = ListNode(1)
b.next = ListNode(3)
b.next.next = ListNode(4)

c = ListNode(2)
c.next = ListNode(6)

l = [a, b, c]

s = Solution()
head = s.mergeKLists(l)
while head:
print(head.val)
head = head.next
pass


class Main:
def __init__(self):
pass


if __name__ == '__main__':
main()