leetcode:Insertion Sort List

這道題算法思路很簡單,就是簡單插入算法,但是由於是對鏈表的插入排序,所以對指針的操作比較容易出錯,下面爲我調試後通過的代碼:

/**
 * 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 *pre;
        ListNode *p=head;
        ListNode *ph=head;
        ListNode *pcur=head->next;
        p->next=NULL;
        ListNode *pnext=NULL;
        
        while(pcur!=NULL)
        {
            pnext=pcur->next;
            while(p!=NULL && p->val<=pcur->val)
            {
                pre=p;
                p=p->next;
            }
            if(p==ph)
            {
                pcur->next=p;
                ph=pcur;
            }
            
            else if(pre->next==NULL)           //如果是else if(p==NULL)的話,條件判斷語句好像不能判斷該句,導致結果錯誤
            {
                pre->next=pcur;
                pcur->next=NULL;
            }
            
            else
            {
                pre->next=pcur;
                pcur->next=p;
            }
            
            pcur=pnext;
            p=ph;
        }
        return ph;
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章