您的位置:首页 > 其它

链表的排序 ---链表插入排序

2015-08-10 16:29 459 查看
链表的插入排序

Insertion Sort List

1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。而对有链表,没有办法随机读取。所以插入排序,对每一个节点来说,只能从头节点开始,慢慢的向后开始比较,如果找到位置则将节点插入序列中。

代码如下,leetcode accept.

/**
* 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 * dummy = new ListNode(-1);
dummy->next = head;

ListNode * pre = head ;
ListNode * cur = head->next ; // 从第二个节点开始

while(cur)
{
if(pre->val > cur->val)  // 这里假设从 头节点到 pre 节点 之间 是排好序的
{
ListNode *tmp = dummy;
while(tmp->next->val<cur->val)
tmp= tmp->next;

pre->next = cur->next;   // 将pre 与cur 后面的节点连接
cur->next = tmp->next;   // cur 插入适当的位置
tmp->next = cur;

}
else
pre = pre->next ;

cur = pre->next;
}

return dummy->next;

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: