[leetcode 147]Insertion Sort List

来源:互联网 发布:淘宝开店银行卡验证 编辑:程序博客网 时间:2024/04/28 13:53

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(NULL == head || NULL == head->next){return head;}        ListNode *runner = head;        ListNode *prerunner = head;        ListNode *handle = head->next;        ListNode *prehandle = head;        while(handle)        {            runner = head;            prerunner = head;            while(runner!= handle && handle->val>=runner->val)            {                prerunner = runner;                runner = runner->next;              }            if(runner == handle)             {                prehandle = handle;handle = handle->next;            }            else             {                prehandle->next = handle->next;                if(runner == head)                {                    head = handle;                    handle->next = runner;                }                else                {                    handle->next = runner;                    prerunner->next = handle;                }                handle = prehandle->next;            }        }        return head;    }};





class Solution {public:    ListNode *insertionSortList(ListNode *head) {        if(NULL == head || NULL == head->next){return head;}        ListNode firstnode(0);        firstnode.next = head;        ListNode *handle = head->next;        ListNode *prehandle = head;        while(handle)        {            ListNode *prerunner = &firstnode;            ListNode *runner = firstnode.next; //head may change            while(runner!= handle && handle->val>=runner->val)            {                prerunner = runner;                runner = runner->next;              }            if(runner == handle)             {                prehandle = handle;handle = handle->next;            }            else             {                prehandle->next = handle->next;                handle->next = runner;                prerunner->next = handle;                handle = prehandle->next;            }        }        return firstnode.next;    }};


0 0