码迷,mamicode.com
首页 > 其他好文 > 详细

Insertion Sort List

时间:2014-12-30 21:58:07      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:

Sort a linked list using insertion sort.

 

注意:

1.当新链表要插入最小值时,即插入一个新的头结点,那么原来的指向头结点的指针要更换。sortedList=s;使得sortedList指针也指向s所指的节点。(s为新头结点)

2.注意q和preq的关系,插入最大结点时,preq为最后一个结点,而q为NULL,所以循环条件是q!=NULL

代码:

class Solution {
public:
    ListNode *insertionSortList(ListNode *head) {
        if(head==NULL) return NULL;
        ListNode* p=head;
        ListNode* sortedList=(ListNode*)malloc(sizeof(ListNode));
        sortedList->val=p->val;
        sortedList->next=NULL;
        ListNode* q=sortedList;
        ListNode* preq=NULL;
        bool notmove=true;
        while(p->next!=NULL){
            p=p->next;
            while(q!=NULL&&p->val>q->val){
                preq=q;
                q=q->next;
                notmove=false;
            }
            
            ListNode* s=(ListNode*)malloc(sizeof(ListNode));
            if(notmove){
                if(p->val>q->val)
                    {s->val=p->val;q->next=s;s->next=NULL;}//插入尾部
                else 
                    {s->val=p->val;s->next=q;sortedList=s;}//插入头部
            }else{
                if(q==NULL)
                {
                    if(p->val>preq->val)
                       {s->val=p->val;preq->next=s;s->next=NULL;}//插入尾部
                }
                else{s->val=p->val;s->next=preq->next;preq->next=s;}//插入中间
            }
            q=sortedList;
            preq=NULL;
            notmove=true;
        }
        return sortedList;
    }
};

 

Insertion Sort List

标签:

原文地址:http://www.cnblogs.com/fightformylife/p/4194512.html

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