您的位置:首页 > 其它

【leetcode】insertion-sort-list

2017-04-28 17:24 393 查看
题目:

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 == NULL)
{
return NULL;
}
if(head->next == NULL)
return head;
//sort表示的是有序序列的开始
ListNode* sort =head;
while(sort->next)
{
sort = sort->next;
}
//sort的初始值设为是最后的结点
while(1)
{
ListNode* cur = head;
ListNode* prev = cur;
//prev表示的是有序序列的前一个 结点 ,也就是当前要 插入的数
while(prev->next != sort)
{
prev = prev->next;
}
ListNode* tmp = prev;
//记录要插入的数;
int data = tmp->val;
//要插入的数data大于 sort 就向前走
while(sort&&data > sort->val)
{
tmp->val = sort->val;
sort = sort->next;
tmp = tmp->next;
}
tmp->val = data;
sort = prev;
//当有序的序列到 头结点的时候 结束
if(sort == head)
return head;
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  插入排序