题目:
Insertion Sort List
Sort a linked list using insertion sort.
思路:
算法导论讲的插入排序方法当一个数插入已排序数里面的时候是从后往前比较,知道找到合适位置。但是单链表是无法从后往前比较的。但是插入排序既可以从后往前比较,也可以从前往后比较。明白这点,对单链表插入排序应该就没什么难度了。
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode insertionSortList(ListNode head) {
if(null == head || null == head.next) return head;
ListNode sortedNode = head;
ListNode temp = null;
for(ListNode i=head;i!=null;) {
if(i.next !=null && i.next.val < sortedNode.val) {
if(head.val >= i.next.val) {
temp = i.next;
i.next = i.next.next;
temp.next = head;
head = temp;
continue;
}
ListNode cursor = head;
while(!(cursor.val <= i.next.val && cursor.next.val >= i.next.val)) cursor = cursor.next;
temp = i.next;
i.next = i.next.next;
temp.next = cursor.next;
cursor.next = temp;
continue;
}
i=i.next;
sortedNode = i;
}
return head;
}
}