LintCode Q98 Sort List mergeSort in Python

  • Jinhai ZHOU
  • 6 Minutes
  • 2017年1月22日
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
"""
Definition of ListNode
class ListNode(object):
def __init__(self, val, next=None):
self.val = val
self.next = next
"""
class Solution:
"""
@param head: The first node of the linked list.
@return: You should return the head of the sorted linked list,
using constant space complexity.
"""
def sortList(self, head):
# write your code here
# merge sort
if head is None or head.next is None:
return head
previous = head
runner = head
current = head
while runner and runner.next:
runner = runner.next.next
previous = current
current = current.next
previous.next = None
# first half head->
# second half current->
first_half = self.sortList(head)
second_half = self.sortList(current)
return self.merge(first_half, second_half)
def merge(self, first, second):
# merge two linked list
dummy = ListNode(0)
current = dummy
while first and second:
if first.val <= second.val:
current.next = first
first = first.next
else:
current.next = second
second = second.next
current = current.next
if first:
current.next = first
if second:
current.next = second
return dummy.next
知识共享许可协议
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。