您的位置:首页 > 编程语言 > C语言/C++

Insertion Sort List (LeetCode)

2014-03-20 13:59 393 查看
题目:

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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息