Sort a linked list using insertion sort.
It is an insertion sort problem, we can treat it like sort array with insertion sort.
The main idea is to find the spot that mismatch the order.
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# @param head, a ListNode
# @return a ListNode
def insertionSortList(self, head):
if head==None or head.next==None:
return head
dummy=ListNode(0) #dummy head
dummy.next=head
cur=head
while cur.next:
if cur.next.val<cur.val: #if mismatch
pre=dummy # start sort from the head
while pre.next.val<cur.next.val:# find the spot to swop
pre=pre.next
tmp=cur.next
cur.next=tmp.next
tmp.next=pre.next
pre.next=tmp
else:
cur=cur.next
return dummy.next