码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-08-10 17:52:44      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

链表的插入排序

 
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;
          
    }
};

 

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

标签:

原文地址:http://www.cnblogs.com/deanlan/p/4718381.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!