LeetCode之路1.5 Sort List

Sort List

Sort a linked list in O(n log n) time using constant space complexity.

今天并没有写出通过测试的代码...

写了一个冒泡排序的,效率明显不够

明天试试快速和归并

对于数组来说,常用的排序方法有7种

  • 插入排序(直接插入和希尔)
  • 选择排序(简单选择,堆)
  • 交换排序(冒泡,快速)
  • 归并排序

推广到链表,应该很多都可以做到

花点时间将基本能看到的方法全部写一遍

package Sort.List;

class ListNode {
    int val;
    ListNode next;
    ListNode(int x) {
        val = x;
        next = null;
    }
}

public class Solution {
    /*
     * Sort a linked list in O(n log n) time using constant space complexity.

     */
    
    public ListNode sortList(ListNode head) {
        maopaoList(head);
        return null;
    }
    
    /*
     * 冒泡排序,先写思路
     * 先判断进来的节点是否为空,是则返回null
     * 之后判断进来节点的next字段是否为空,为空返回head
     * 之后顺次交换链表中乱序的相邻组合,设置flag,从开头到结尾都
     * 一旦发生交换,则设为false,说明有交换,可能仍然是乱序
     * 直到某次从头到尾的扫描都没有发生交换
     * 则说明已经完成了排序,时间复杂度o(n^2)
     * 稳定排序
     * 测试结果..当然是Time Limit Exceeded
     */
    
    public ListNode maopaoList(ListNode head){

        if(head == null)
            return null;
        if(head.next == null )
            return head;
        
        boolean  flag = false;
        ListNode firstNode , temp , preNode;
        
        while(true){
            flag = true;
            //确定第一个节点
            if(head.val > head.next.val){
                firstNode = head.next ;
                preNode = head.next;
                temp = head.next.next;
                head.next.next = head;
                head.next = temp;

            }else{
                firstNode = head;
                preNode = head;
                head = head.next;
            }
            while(head.next != null){
                if(head.val > head.next.val){
                    temp = head.next.next;
                    preNode.next = head.next;
                    head.next.next = head;
                    head.next = temp;               
                    preNode = preNode.next;
                    flag = false;
                }else{
                    preNode = head;
                    head = head.next;
                }
            }
            if(flag)
                break;
            head = firstNode;
        }
        
        //print(firstNode);
        return firstNode;

    }
    

    
    /*
     * 类似归并排序的方法
     * 首先让每相邻的2个节点有序,即 1-2,3-4,5-6,。。。。。
     * 对每相邻的两段有序的节点归并,使得相邻的两段整个有序;
     * 重复2),直到整个链表有序;
     * 时间复杂度o(n*logn)
     * 
     * 思路和上面的基本一致
     * 
     */
    
    public ListNode guibingList(ListNode head){
        if(head == null)
            return null;
        
        if(head.next == null)
            return head;
        
        //明天再战
        
        return null;
    }
    
    public void print(ListNode head){
        while(head != null){
            System.out.print(head.val + "  ");
            head = head.next;
        }
    }
    
    public Solution(ListNode head){
        sortList(head);
    }
    
    public static void main(String[] args){
        ListNode first = new ListNode(8);
        ListNode second = new ListNode(7);      
        ListNode third = new ListNode(4);
        ListNode fourth = new ListNode(9);
        
        first.next = second;
        second.next = third;
        third.next = fourth;
        
        
        Solution test = new Solution(first);
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,227评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,755评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,899评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,257评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,617评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,757评论 1 221
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,982评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,715评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,454评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,666评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,148评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,512评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,156评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,112评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,896评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,809评论 2 279
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,691评论 2 272

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,663评论 0 33
  • 总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序...
    jiangliang阅读 1,269评论 0 1
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,102评论 0 52
  • 我一个人悄悄地回了大学,两年了,我们分散已经两年了,我不知道我老是在回忆什么,我只知道很美好,那四年,像是做...
    披着回忆的羊三阅读 241评论 0 1
  • 【萝鼓萱天】20170716 学习力践行记录 day62 1,鹅妈妈磨耳朵三首二十分钟。磨耳朵期间我用夸张的动作来...
    眸眸_50ae阅读 166评论 0 0