2018-08-11 23:50:30

问题描述:

问题求解:

解法一、归并排序

    public ListNode sortList(ListNode head) {if (head == null || head.next == null)return head;ListNode prev = null, slow = head, fast = head;while (fast != null && fast.next != null) {prev = slow;slow = slow.next;fast = fast.next.next;}prev.next = null;ListNode l1 = sortList(head);ListNode l2 = sortList(slow);return merge(l1, l2);}private ListNode merge(ListNode l1, ListNode l2) {ListNode dummy = new ListNode(0);ListNode p = dummy;while (l1 != null && l2 != null) {if (l1.val < l2.val) {p.next = l1;l1 = l1.next;}else {p.next = l2;l2 = l2.next;}p = p.next;}if (l1 != null) {p.next = l1;}if (l2 != null) {p.next = l2;}return dummy.next;}

解法二、快速排序

  public ListNode sortList(ListNode head) {if (head == null || head.next == null)return head;  qsort(head, null);  return head;  }// [begin, end)void qsort(ListNode begin, ListNode end) {if (begin == end || begin.next == end) return;ListNode mid = partition(begin, end);qsort(begin, mid);qsort(mid.next, end);}ListNode partition(ListNode begin, ListNode end) {int key = begin.val;ListNode p = begin;ListNode q = begin.next;while (q != end) {if (q.val < key) {p = p.next;int tmp = p.val;p.val = q.val;q.val = tmp;}q = q.next;}int tmp = p.val;p.val = begin.val;begin.val = tmp;return p;}

转载于:https://www.cnblogs.com/TIMHY/p/9461658.html

链表排序 Sort List相关推荐

  1. 链表排序(C语言)选择排序

    #include <stdio.h> #include <stdlib.h> #include <time.h> //用到了time函数#define arrayS ...

  2. [转载]详细解说STL排序(sort)------这篇博文在一道题上救了我o_0

    详细解说 STL 排序(Sort) 作者Winter 原文地址:http://www.cppblog.com/mzty/archive/2005/12/15/1770.html 详细解说 STL 排序 ...

  3. c语言编程单向链表排序,【分享】C语言 简单链表创建 排序 输出

    [Asm] 纯文本查看 复制代码#include #include//为动态分配提供函数库 typedef struct node { int num;//数据域 struct node *next; ...

  4. 【阿里面试】链表排序总结

    题目:对单链表进行排序,要求不改变每个节点内的值. 1.首先自然而然地会想到快速排序,毕竟是一个经典的排序算法.但是在排序过程中要求不能改变节点中的值,就必须通过改变节点中的指针来交换节点.而且快速排 ...

  5. 单链表的应用--对单链表排序

      对单链表进行排序,利用前文写好的链表的框架,在链表类中补充Sort方法. 对单链表排序 一.问题分析 二.代码分析 1.链表类LinkList 2.链表方法Sort 三.测试代码 1.主函数 2. ...

  6. 面试题精选:单链表排序也能玩出花来

    今天国庆节,祝大家中秋节快乐,顺便给大家拜个早年[狗头].不过最近还在准备面试的同学们不要浪太狠,还是要好好学习的鸭. 单链表的排序在数据结构类的面试题中简直是集大成者,什么排序.链表.链表删除.添加 ...

  7. java列表排序sort_java list(java list排序sort升序、降序)

    javalist List是Java中比较常用的调集类,关于List接口有许多完成类,本文就来简略介绍下其间几个重点的完成ArrayList.LinkedList和Vector之间的联系和差异. Li ...

  8. SE API第10/11天:集合 ——>ArrayListals、Iterator遍历迭代器、增强for、List集→subList、集合间转换asList、排序sort | Map相关

    一.Java 集合框架 0.介绍: (0)什么是集合 -集合与数组一样,可以保存一组元素,并且提供了操作元素的相关方法,使用更方便. (1)集合框架被设计成要满足以下几个目标: 该框架必须是高性能的. ...

  9. 冒泡链表排序java_链表排序(冒泡、选择、插入、快排、归并、希尔、堆排序)...

    以下排序算法的正确性都可以在LeetCode的链表排序这一题检测.本文用到的链表结构如下(排序算法都是传入链表头指针作为参数,返回排序后的头指针) struct ListNode { int val; ...

  10. 链表排序(冒泡、选择、插入、快排、归并、希尔、堆排序)

    这篇文章分析一下链表的各种排序方法. 以下排序算法的正确性都可以在LeetCode的链表排序这一题检测.本文用到的链表结构如下(排序算法都是传入链表头指针作为参数,返回排序后的头指针) struct ...

最新文章

  1. linux qml 环境,利用Qml与Golang打造Gui客户端(二)qamel环境安装
  2. 基于Flink SQL构建流批一体实时数仓
  3. 为什么微信内无法分享转发网址,详谈微信网址防屏蔽的办法
  4. fabric sdk php,Hyperledger Fabric PHP SDK
  5. 监测div大小变化_CSS怎么实现div随着网页的大小变化而变化呢?
  6. 页面文件太小无法完成操作_PPT操作界面基础解析
  7. Linux 命令 (tar,权限,管道)
  8. Linux高级编程--06.进程概述
  9. 【论文整理】NAACL2019+AAAI2019文本分类论文摘要
  10. JVM 为什么使用元空间替换了永久代
  11. iis如何连接mysql_iis怎么连接数据库
  12. MISRA C指导指南解读系列1(MISRA C是什么)
  13. python毕业论文参考文献格式_毕业论文参考文献规范格式
  14. iPhone12打开webview闪退或者白屏
  15. My summery
  16. 魔法师元素平衡(C++解法)
  17. 正则表达式匹配标签里面的内容
  18. RINEX 2.11 观测值文件格式说明
  19. 通信原理笔记—模拟信号的数字编码
  20. deep Learning 之入门一 (ps:知乎上看到的大佬写的非常好,所以自己记录下)

热门文章

  1. 扎克伯格正用“山寨”策略碾压Snapchat
  2. mysql报错:You must at least set –server-id to enable either a master or a slave
  3. Linux_MySQL下(4) 未整理
  4. Resteasy配置及其使用
  5. 爱了爱了!0.052 秒打开 100GB 数据,这个开源库火爆了!
  6. IDEA 的这款插件真是逆天了,代码那都不是事!
  7. 高并发、高性能 Web 架构
  8. 国外大神整理的 2019 年 Java 权威开发路线图,Java大神养成记
  9. 使用 shell 在多服务器上批量操作
  10. 2018只剩32天,动着心思想跳槽的你,还要YY到什么时候