您的位置:首页 > 其它

leetcode题目解答---Insertion Sort List

2014-04-24 19:37 513 查看
题目如下:

Sort a linked list using insertion sort.

使用插入排序法排列一个链表。

先来介绍一下插入排序法:

其基本思路就是:

1)分为两个部分,一个部分为已经排序,另一部分为尚未排序。准备三个指针,一个排好序的头指针,一个排好序的尾指针,最后一个为尚未排好序的头指针。

2)每次从未排好序的链表或数组中取出一个数据,插入到排好序的数组或链表中。直到结束。

思路简单,对于链表,主要是插入点的前一个点记得存取,另外一个是每次必须从排好序的头开始遍历,找出要插入的节点位置。

另外,如果插入点是头部,需要特别对待。

代码见下:

/**
* 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 *sorthead = head;
ListNode *prepcrsort = head;
ListNode *pcrsort = sorthead;
ListNode *sorttail = head;
ListNode *unsorthead = head;
ListNode *nextunsort = NULL;
bool bIsBeginMin = false;
while (sorttail->next)
{
bIsBeginMin = false;
unsorthead = sorttail->next;
nextunsort = unsorthead->next;
if (unsorthead->val < sorttail->val)
{
pcrsort = sorthead;
while (pcrsort != sorttail && pcrsort->val < unsorthead->val)
{
bIsBeginMin = true;
prepcrsort = pcrsort;
pcrsort = pcrsort->next;
}
if (bIsBeginMin)
{
prepcrsort->next = unsorthead;
unsorthead->next = pcrsort;
sorttail->next = nextunsort;
}
else
{
sorthead = unsorthead;
sorthead->next = pcrsort;
sorttail->next = nextunsort;
}
}
else
{
sorttail = unsorthead;
}
}
return sorthead;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  插入排序 leetcode