Sort a linked list using insertion sort.
我自己AC的代码花费的时间比较长,下面是看了博客http://www.cnblogs.com/TenosDoIt/p/3422296.html 之后重新写的
class Solution {
public:
ListNode *insertionSortList(ListNode *head) {
if (head == NULL || head->next == NULL) {
return head;
}
ListNode *sorted_head = head;
ListNode *sorted_rear = head;
ListNode *unsorted = head->next;
while (unsorted) {
ListNode *cur = unsorted;
unsorted = unsorted->next;
if (cur->val <= sorted_head->val) {
cur->next = sorted_head;
sorted_head = cur;
} else if (sorted_rear->val <= cur->val) {
sorted_rear->next = cur;
sorted_rear = cur;
} else {
ListNode *less = sorted_head;
while (less->next && less->next->val < cur->val) {
less = less->next;
}
cur->next = less->next;
less->next = cur;
}
}
sorted_rear->next = NULL;
return sorted_head;
}
};