147 insertion sort list

1,定義一個已經(jīng)排序好的鏈表sort = NULL.
2,循環(huán)從當(dāng)前節(jié)點取出node插入到sort中
*需要主要的是,在插入sort前需要保持head->next,否則插入后保持值就不對

3,在插入函數(shù)邏輯中就是找到第一個大于等于需要插入節(jié)點的節(jié)點,然后放在這個節(jié)點前面,如果找不到,就插入到末尾

struct ListNode *insert(struct ListNode *sorted, struct ListNode *node)
{
    struct ListNode *dummyhead = malloc(sizeof(struct ListNode));
    dummyhead->next = sorted;
    struct ListNode *prev, *curr;
    struct ListNode *ret;
    curr = sorted;
    prev= dummyhead;
    while(curr){
        if(node->val <= curr->val)
        {
            //insert before curr
            node->next = curr;
            prev->next = node;
            ret = dummyhead->next;
            free(dummyhead);
            return ret;

        }else{
            curr = curr->next;
            prev = prev->next;
        }
    }

    prev->next = node;
    node->next = NULL;
    ret = dummyhead->next;
    free(dummyhead);
    return ret;
}

struct ListNode* insertionSortList(struct ListNode* head) {

    struct ListNode * sorted = NULL;
    struct ListNode * node;
    while(head){
        node = head;
        head = head->next;
        sorted = insert(sorted, node);
        
    }
    
    return sorted;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容