Sort a linked list using insertion sort.

Subscribe to see which companies asked this question

解答

对于链表的插入排序,用tmp_tail遍历链表,每次的待插入数是tmp_tail->next的元素,待插入数必须从头开始比较,当然从头开始比较时要注意处理待排序数小于或等于链表首元素的情况,因为插入在链表的首元素之前与一般情况的插入不同,而如果待插入数插入在它之前的数列中,则用于遍历链表的指针tmp_tail不需要移动,这与数组不同,毕竟数组插入时是要将部分数组元素整体移动的,而链表不需要,将待插入数插入在前面的链表中后tmp_tail的下一个数就是待排序数,但是如果待插入数保持原位不动,则需要将tmp_tail后移一个,因为新的待插入数是原先待插入数的下一个数,判断待插入数是否在原位只需要在遍历结束后判断tmp_tail->next是否等于tmp_node(待插入数)即可。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* insertionSortList(struct ListNode* head) {
    struct ListNode *tmp_node, *tmp_head, *tmp_tail = head;

    if(NULL == tmp_tail){
        return head;
    }
    while(NULL != tmp_tail->next){
        tmp_node = tmp_tail->next;
        if(head->val >= tmp_node->val){
            tmp_tail->next = tmp_node->next;
            tmp_node->next = head;
            head = tmp_node;
        }
        else{
            tmp_head = head;
            while(tmp_node != tmp_head->next){
                if(tmp_head->next->val < tmp_node->val){
                    tmp_head = tmp_head->next;
                }
                else{
                    tmp_tail->next = tmp_node->next;
                    tmp_node->next = tmp_head->next;
                    tmp_head->next = tmp_node;
                    break;
                }
            }
            if(tmp_tail->next == tmp_node){
                tmp_tail = tmp_tail->next;
            }
        }
    }

    return head;
}

LeetCode OJ 147. Insertion Sort List的更多相关文章

  1. 【LeetCode】147. Insertion Sort List 解题报告(Python)

    [LeetCode]147. Insertion Sort List 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: h ...

  2. 【LeetCode OJ】Insertion Sort List

    Problem: Sort a linked list using insertion sort. The node of the linked list is defined as: /** * D ...

  3. 【leetcode】147. Insertion Sort List

    Sort a linked list using insertion sort. 链表的插入排序. 需要创建一个虚拟节点.注意点就是不要节点之间断了. class Solution { public: ...

  4. LeetCode OJ:Insertion Sort List (插入排序链表)

    Sort a linked list using insertion sort. 用插入排序来排序一个list,额, 我写的好麻烦啊, debug了好久,至少提交了5次...写吐了快,先贴代码,写的也 ...

  5. 【刷题-LeetCode】147 Insertion Sort List

    Insertion Sort List Sort a linked list using insertion sort. A graphical example of insertion sort. ...

  6. [LeetCode] 147. Insertion Sort List 链表插入排序

    Sort a linked list using insertion sort. A graphical example of insertion sort. The partial sorted l ...

  7. Java for LeetCode 147 Insertion Sort List

    Sort a linked list using insertion sort. 解题思路: 插入排序,JAVA实现如下: public ListNode insertionSortList(List ...

  8. leetcode 147. Insertion Sort List ----- java

    Sort a linked list using insertion sort. 插入排序. /** * Definition for singly-linked list. * public cla ...

  9. [LeetCode] 147. Insertion Sort List 解题思路

    Sort a linked list using insertion sort. 问题:实现单向链表的插入排序. 这是比较常规的一个算法题目. 从左往右扫列表,每次将指针的下一个元素插入前面已排好序的 ...

随机推荐

  1. C#调用C++ DLL类方法

    C++的优势在于高效灵活,C#的优势在于简单易用,两者结合起来对项目开发来说是件好事,而且C++不容易反编译,也保障了代码的安全性,如果一些核心算法使用C#编写,那么保密就是一个问题. C++生成的D ...

  2. DedeCMS织梦动态分页类,datalist标签使用实例

    <?php require_once(dirname(__FILE__)."/include/common.inc.php");//载入基础文件 require_once(D ...

  3. Django缓存使用方法

    Django缓存分为Session和Cookie:Session为放在服务器端的缓存:Cookie为放在客户端(浏览器)的缓存. Session一般用来保存登录会话:Cookie一般用来保存一些个性化 ...

  4. IEA For PCS7

    1. IEA简介 PCS7中的Import/Export Assistant (IEA) 软件是对大量数据进行合理工程组态的有效工具,它以过程标签类型的多重使用和实例解决方案为基础.该软件特别适用于具 ...

  5. 【MySQL】探究之常用SQL

    一些SQL命令(不断更新,我总记不住,哭) List 建库建表 表的重命名(不区分大小写) 列的重命名 编码 修改结构 添加删除索引 大批量删除 binlog相关 select相关 数据库备份和恢复 ...

  6. Android Gradle 多Module单独编译一个Module

    假如项目中有两个Module,app1和app2.假如我只想对app1 module进行build,则可以: gradle :App1:build build命令可以换成任意gradle命令.

  7. ADF_Database Develop系列2_设计数据库表之Table Partitions/Create Users/Generate DDL

    2013-05-01 Created By BaoXinjian

  8. 显示hello

    The modern user interface is constructed from visual objects of various sorts. Depending on the oper ...

  9. IIS与Apache同时使用80端口

    如果我们在一台服务器即使用IIS作为WEB服务器,同时又想使用Apache作为WEB服务器,那么如何来公用80端口呢? 我们可以使用单IP地址来实现,但是在性能上有损失: 将apache设为使用80端 ...

  10. .net 使用ffmpeg.exe进行音频转码

    #region 音频转换 private int AudioIntervalTime = 100, iAudio = 0; private string strPath = "D:\\web ...