[LeetCode] Challenge log 147

147. Insertion Sort List

Algorithm: Insertion sort

Trick: If a node is greater than the sorted tail, make it the new tail and move on to next.


Sort a linked list using insertion sort.

img
A graphical example of insertion sort. The partial sorted list (black) initially contains only the first element in the list.
With each iteration one element (red) is removed from the input data and inserted in-place into the sorted list

Algorithm of Insertion Sort:

  1. Insertion sort iterates, consuming one input element each repetition, and growing a sorted output list.
  2. At each iteration, insertion sort removes one element from the input data, finds the location it belongs within the sorted list, and inserts it there.
  3. It repeats until no input elements remain.

Example 1:

1
2
Input: 4->2->1->3
Output: 1->2->3->4

Example 2:

1
2
Input: -1->5->3->4->0
Output: -1->0->3->4->5

Soulution:
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
class Solution:
def insertionSortList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head: return None

newhead = ListNode(0)
newhead.next = head
sort = head
cur = head.next
while cur:
# quick check if cur > sort
if cur.val > sort.val:
sort = cur
cur = cur.next
continue

# delete cur
nxt = cur.next
sort.next = nxt

# insert cur
pos = newhead
while pos != sort and cur.val > pos.next.val:
pos = pos.next
temp = pos.next
pos.next = cur
cur.next = temp

# update cur
cur = nxt

return newhead.next
0%