leetcode InsertionSort list

来源:互联网 发布:怎样做淘宝淘宝课程 编辑:程序博客网 时间:2024/06/05 10:09

最近感觉自己的算法训练实在是太少,,所以刷一下leetcode,这里记录一下leetcode 排序的题目:sort list 的解答过程:

1. 这个代码出现TLE

/** * 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* pCur = head->next;        ListNode* pPre = head;        while ( pCur != NULL )        {            //如果插入头部            if ( pCur->val < head->val )            {                pPre->next = pCur->next;                pCur->next = head;                head = pCur;                pCur = pPre->next;            }            //插入其他地方            else            {                ListNode* pTempPre = head;                ListNode* pTempCur = head->next;                while ( pTempCur != pCur )                {                    if ( pCur->val < pTempCur->val )                    {                        pPre->next = pCur->next;                        pCur->next = pTempCur;                        pTempPre->next = pCur;                        break;                    }                    pTempPre = pTempCur;                    pTempCur = pTempPre->next;                }                pPre = pCur;                pCur = pPre->next;            }        }        return head;    }};

2. 然后更改了一下,,变为如下代码就AC了:

/** * 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* first_unsorted;        ListNode* last_sorted;        ListNode* current;        ListNode* trailing;                last_sorted = head;                while ( last_sorted->next != NULL )        {            first_unsorted = last_sorted->next;                        //如果是要插入到链表头部            if ( first_unsorted->val < head->val )            {                last_sorted->next = first_unsorted->next;                first_unsorted->next = head;                head = first_unsorted;            }            //如果是要插入其他地方            else            {                //找到要插入的位置                trailing = head;                current = trailing->next;                while ( current->val <= first_unsorted->val && current != first_unsorted )                {                    trailing = current;                    current = trailing->next;                }
<span style="white-space:pre"></span>//如果位置不用变                if ( current == first_unsorted )                {                    last_sorted = first_unsorted;                }
<span style="white-space:pre"></span>//如果位置需要变                else                {                    last_sorted->next = first_unsorted->next;                    first_unsorted->next = current;                    trailing->next = first_unsorted;                }            }        }                return head;    }};



0 0
原创粉丝点击