Middle-题目63:147. Insertion Sort List

题目原文:
Sort a linked list using insertion sort.
题目大意:
使用插入排序对单链表排序。
题目分析:
使用直接插入排序,即从第二个元素开始,每次寻找它应该在前面的有序区间内所在的位置。
源码:(language:c)

struct ListNode* insertionSortList(struct ListNode* head) {
    if(!head || !head->next)
        return head;
    else {
        struct ListNode* sortedHead = (struct ListNode*)malloc(sizeof(struct ListNode));
        sortedHead->val = head->val;
        sortedHead->next = NULL;

        for (struct ListNode* node = head->next; node; node = node->next) {
            if(node->val <= sortedHead->val) { // this node is smaller than the smallest node of sortedHead
                struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
                newNode->val = node->val;
                newNode->next = sortedHead;
                sortedHead = newNode;
            }
            else {
                struct ListNode* temp;
                for(temp = sortedHead; temp; temp = temp->next) {
                    if(temp->val <= node->val && (!temp->next || temp->next->val >node->val)) { //insert this node after temp
                        struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
                        newNode->val = node->val;
                        newNode->next = temp->next;
                        temp->next = newNode;
                        break;
                    }                       
                }
            }
        }
        return sortedHead;
    }
}

成绩:
76ms,beats 25%,众数72ms,25%
cmershen的碎碎念:
本题代码还是过于复杂,而且可以在有序区使用二分查找优化之。

阅读更多
版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs https://blog.csdn.net/cmershen/article/details/51546957
个人分类: Leetcode
上一篇Middle-题目62:86. Partition List
下一篇Middle-题目64:95. Unique Binary Search Trees II
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭