Middle-题目63:147. Insertion Sort List

原创 2016年05月31日 16:33:50

题目原文:
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

LeetCode(147) Insertion Sort List

题目如下: Sort a linked list using insertion sort. 分析如下: 使用插入排序的方法,对一个链表进行排序。看上去题目比较简单。 不过坑还是有几个的: 1 要记得...
  • feliciafay
  • feliciafay
  • 2014年01月28日 11:32
  • 2517

LeetCode147: Insertion Sort List

Sort a linked list using insertion sort. 本题很简单,用插入排序方法对链表进行排序。可以构建一个临时的链表,然后将待排序的链表的每一个节点插入到临时链表中。...
  • sunao2002002
  • sunao2002002
  • 2015年05月04日 19:24
  • 966

147. Insertion Sort List (python)

Sort a linked list using insertion sort. 题意:采用插入排序法对链表进行排序 思路:类似于扑克牌按照从小到大插入,将第i个元素与左边已排序的元素比较,找到位...
  • qq_28119401
  • qq_28119401
  • 2016年09月19日 22:11
  • 285

Leetcode Insertion Sort List 解题报告

http://oj.leetcode.com/problems/insertion-sort-list/ Sort a linked list using insertion sort. 基本分析:...
  • worldwindjp
  • worldwindjp
  • 2014年02月11日 09:23
  • 5453

147. Insertion Sort List**

Sort a linked list using insertion sort. public ListNode insertionSortList(ListNode head) { ...
  • alwaystry
  • alwaystry
  • 2017年01月05日 22:04
  • 74

147. Insertion Sort List。

Sort a linked list using insertion sort.使用插入排序来排序链表。可以按照数组中的思路来做,先将创建一个新的链表,然后每次将原来的链表中的第一个节点拿出来与新的链...
  • Leafage_M
  • Leafage_M
  • 2017年09月25日 21:45
  • 562

147. Insertion Sort List

Sort a linked list using insertion sort. 一开始的第路是对的,但是。。问题就在没把两个链表断开。。。 LeetCode(147)Insertion Sort ...
  • sjt091110317
  • sjt091110317
  • 2014年03月12日 22:57
  • 423

Insertion Sort List -- LeetCode

原题链接: http://oj.leetcode.com/problems/insertion-sort-list/  这道题跟Sort List类似,要求在链表上实现一种排序算法,这道题是指定实现...
  • linhuanmars
  • linhuanmars
  • 2014年03月14日 22:45
  • 15173

插入排序Sort a linked list using insertion sort in Java

Sort a linked list using insertion sort in Java package algorithm.sort; class ListNode { int ...
  • u013063153
  • u013063153
  • 2015年08月25日 10:41
  • 627

147. Insertion Sort List(unsolved)

Sort a linked list using insertion sort.解答: 这道题思路就是从头往后扫,遇见后一个元素比当前元素小的话,那么保留这个循环,在另一个循环中从头扫起,看在哪里能...
  • gdmmzmj
  • gdmmzmj
  • 2017年03月02日 11:54
  • 59
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Middle-题目63:147. Insertion Sort List
举报原因:
原因补充:

(最多只允许输入30个字)