leetCode---链表专题

原创 2018年04月17日 10:36:31

题目描述1    单链表排序问题

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


用归并排序:  其中只是创建了一个preHead节点 占用空间O(1)    时间O(nlogn)

public class Solution {
    public ListNode sortList(ListNode head) {
        if(head == null || head.next == null) {
            return head;
        }  //常规合并排序思路
        ListNode mid = getMid(head);
        ListNode midNext = mid.next;
        mid.next = null;                      //一定记得断开head 左半部分的链表尾部
        return mergeSort(sortList(head), sortList(midNext));
    }
    private ListNode getMid(ListNode head) {         //使用快慢指针获取中间节点位置
        if(head == null || head.next == null) {
            return head;
        }
        ListNode slow = head, quick = head;
        while(quick.next != null && quick.next.next != null) {
            slow = slow.next;
            quick = quick.next.next;
        }
        return slow;
    }
    private ListNode mergeSort(ListNode n1, ListNode n2) {    对两个分链表进行合并
        ListNode preHead = new ListNode(0), cur1 = n1, cur2 = n2, cur = preHead;
        while(cur1 != null && cur2 != null) {
            if(cur1.val < cur2.val) {
                cur.next = cur1;
                cur1 = cur1.next;
            } else {
                cur.next = cur2;
                cur2 = cur2.next;
            }
            cur = cur.next;
        }
        cur.next = cur1 == null ? cur2 : cur1;     //看哪个链表不为空 继续接上
        return preHead.next;
    }
}

用快速排序:

public class Solution {
    public ListNode sortList(ListNode head) {
        quickSort(head, null);    //头尾节点
        return head;
    }
 
    public static void quickSort(ListNode head, ListNode end) {
        if(head != end) {
            ListNode 
      partition= partition(head);
        quickSort(head, partition); //分解成两部分        quickSort(partition.next, end);        }    }     public static ListNode partition(ListNode head) {        ListNode slow = head;        ListNode fast = head.next;        while (fast != null) {            if(fast.val < head.val) {                slow = slow.next;                fast.val = slow.val ^ fast.val ^ (slow.val = fast.val);            }            fast = fast.next;        }        slow.val = head.val ^ slow.val ^ (head.val = slow.val);        return slow;    }}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/duoduo18up/article/details/79971196

4.9.链表&状态机与多线程

-
  • 1970年01月01日 08:00

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

分析:使用o(nlogn)的时间复杂度和常量空间复杂度,对链表排序,只能使用归并排序。归并排序是将两个或两个以上的有序链表合并成一个新的链表。常见的是二路归并排序算法,思想是将数组或链表中前后相邻的两...
  • Apple_wolf
  • Apple_wolf
  • 2017-11-06 15:37:49
  • 184

Camera Calibration and 3D Reconstruction(opencv 2.4)

Camera Calibration and 3D Reconstruction¶ The functions in this section use a so-called pinhole cam...
  • Real_Myth
  • Real_Myth
  • 2016-12-21 15:53:59
  • 1402

JavaScript

1、javaScript的概念:是一种表述语言,也是一种基于对象(Object)和事件驱动(EventDriven)的,安全性好的脚本语言,运行在客户端,从而减轻服务器端的负担,总结如下:   ...
  • m0_37412958
  • m0_37412958
  • 2017-11-24 18:04:46
  • 808

Linux两种方法来处理传入TCP数据段:快速路径(Fast Path)和慢速路径(Slow Path)

在Linux中,有两种方法来处理传入TCP数据段:快速路径(Fast Path)和慢速路径(Slow Path)。使用快速路径只进行最少的处理,如处理数据段、发生ACK、存储时间戳等。使用慢速路径可以...
  • zhou1021jian
  • zhou1021jian
  • 2017-04-07 18:14:56
  • 1013

内核分析-第五周

预备知识 内核态 用户态 为什么要划分系统级别? 如何区分内核和用户态? cs:eip 寄存器上下文 上下文切换 系统调用号 中断向量 调度时机 系统调用过程中一定发生中断, 在系统调用执行过程中可能...
  • wdxz6547
  • wdxz6547
  • 2016-03-27 21:06:36
  • 1657

fasttext初步使用

转载自: http://blog.csdn.net/lxg0807/article/details/52960072#comments 训练数据 # _*_coding:utf-8 _*_ i...
  • appleyuchi
  • appleyuchi
  • 2017-09-01 10:36:52
  • 2666

2D Fast Marching Computations

Fast Marching method 跟 dijkstra 方法类似,只不过dijkstra方法的路径只能沿网格,而Fast Marching method的方法可以沿斜线. [Level Se...
  • seamanj
  • seamanj
  • 2016-07-22 05:14:38
  • 2594

pixhawk 从main开始分析传感器数据如何流动起来,以GPS为例

本文以GPS数据为代表,分析数据如何从硬件驱动层慢慢的流到主函数算法应用层(其它传感器数据都类似于GPS数据),内容有点复杂,有些地方可能定位定错了,但也是并列的层,将就的算跑通了传感器数据流动过程。...
  • czyv587
  • czyv587
  • 2016-05-09 17:21:08
  • 6302

【深度学习】研究FastRcnn代码

转载自http://weibo.com/p/2304189ae57c020102vopp 原文:http://arxiv.org/pdf/1504.08083.pdf 代码:https://git...
  • u010678153
  • u010678153
  • 2015-07-15 14:30:28
  • 12060
收藏助手
不良信息举报
您举报文章:leetCode---链表专题
举报原因:
原因补充:

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