147 insertion sort list

1,定义一个已经排序好的链表sort = NULL.
2,循环从当前节点取出node插入到sort中
*需要主要的是,在插入sort前需要保持head->next,否则插入后保持值就不对

3,在插入函数逻辑中就是找到第一个大于等于需要插入节点的节点,然后放在这个节点前面,如果找不到,就插入到末尾

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;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容