题目:
Sort a linked list using insertion sort.
解释:
插入排序基本思想:假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区。
C++ 解答:
/**
* 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==NULL || head->next==NULL)
return head;
ListNode *r, *end, *key, *t, *s;
//建立新的链表r,r为头指针,p为移动指针,end为末尾指针
r = new ListNode(head->val);
int temp;
key = head->next;
ListNode *q;
while(key!=NULL)
{
s = r;
while(s!=NULL && s->next!=NULL && key->val >= s->val)
{
s = s->next;
}
if(key->val < s->val) //需要进行排序的时刻,就在r中q的前面插入一个节点就是啊,可以将key的值赋给q,然后在q的后面插入一个值就是
{
temp = s->val;
s->val = key->val;
t = new ListNode(temp);
t->next = s->next;
s->next = t;
}
else if(key->val >= s->val && s->next==NULL)
{
end = new ListNode(key->val);
s->next = end;
}
key = key->next;
}
return r;
}
};