147. Insertion Sort List
Sort a linked list using insertion sort.
/*
Sort a linked list using insertion sort.
链表的插入排序,
插入算法把要排序的数组分成两部分:第一部分包含了已经排序元素,而第二部分是未排序元素。将未排序元素
的第一个挨个和排序的比较,然后插入。
*/
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* insertionSortList(ListNode* head)
{
if (!head || !head->next)
return head;
ListNode hhead(-1);
hhead.next = head;
ListNode* next_node = head->next;
ListNode* last_node = head;
while (next_node)
{
int value = next_node->val;
ListNode* p = &hhead;
while (p->next != next_node && value >= p->next->val)
p = p->next;
if (p->next == next_node)
{
last_node = next_node;
next_node = next_node->next;
continue;
}
last_node->next = next_node->next;
next_node->next = p->next;
p->next = next_node;
next_node = last_node->next;
}
return hhead.next;
}
};