# Definition for singly-linked list.
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
# Slow, 2000+ms
def insertionSortList(self, head): """ :type head: ListNode :rtype: ListNode """ if head is None:
return head
newHead = ListNode(0)
newHead.next = head
head = head.next
newHead.next.next = None
while head is not None:
postNode = newHead.next
preNode = newHead
while postNode is not None and postNode.val < head.val:
preNode = preNode.next
postNode = postNode.next
tmpNode = head.next
preNode.next = head
head.next = postNode
head = tmpNode
return newHead.next
# Fast,100+ms
def insertionSortList(self, head):
if not head or not head.next:
return head
dummy = ListNode(0)
pre = dummy
dummy.next = head
curr = head
while curr and curr.next:
val = curr.next.val
if curr.val < val:
curr = curr.next
continue
if pre.next.val > val:
pre = dummy
while pre.next.val < val:
pre = pre.next
new = curr.next
curr.next = new.next
new.next = pre.next
pre.next = new