链表排序 Sort List
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相关推荐
- 链表排序(C语言)选择排序
#include <stdio.h> #include <stdlib.h> #include <time.h> //用到了time函数#define arrayS ...
- [转载]详细解说STL排序(sort)------这篇博文在一道题上救了我o_0
详细解说 STL 排序(Sort) 作者Winter 原文地址:http://www.cppblog.com/mzty/archive/2005/12/15/1770.html 详细解说 STL 排序 ...
- c语言编程单向链表排序,【分享】C语言 简单链表创建 排序 输出
[Asm] 纯文本查看 复制代码#include #include//为动态分配提供函数库 typedef struct node { int num;//数据域 struct node *next; ...
- 【阿里面试】链表排序总结
题目:对单链表进行排序,要求不改变每个节点内的值. 1.首先自然而然地会想到快速排序,毕竟是一个经典的排序算法.但是在排序过程中要求不能改变节点中的值,就必须通过改变节点中的指针来交换节点.而且快速排 ...
- 单链表的应用--对单链表排序
对单链表进行排序,利用前文写好的链表的框架,在链表类中补充Sort方法. 对单链表排序 一.问题分析 二.代码分析 1.链表类LinkList 2.链表方法Sort 三.测试代码 1.主函数 2. ...
- 面试题精选:单链表排序也能玩出花来
今天国庆节,祝大家中秋节快乐,顺便给大家拜个早年[狗头].不过最近还在准备面试的同学们不要浪太狠,还是要好好学习的鸭. 单链表的排序在数据结构类的面试题中简直是集大成者,什么排序.链表.链表删除.添加 ...
- java列表排序sort_java list(java list排序sort升序、降序)
javalist List是Java中比较常用的调集类,关于List接口有许多完成类,本文就来简略介绍下其间几个重点的完成ArrayList.LinkedList和Vector之间的联系和差异. Li ...
- SE API第10/11天:集合 ——>ArrayListals、Iterator遍历迭代器、增强for、List集→subList、集合间转换asList、排序sort | Map相关
一.Java 集合框架 0.介绍: (0)什么是集合 -集合与数组一样,可以保存一组元素,并且提供了操作元素的相关方法,使用更方便. (1)集合框架被设计成要满足以下几个目标: 该框架必须是高性能的. ...
- 冒泡链表排序java_链表排序(冒泡、选择、插入、快排、归并、希尔、堆排序)...
以下排序算法的正确性都可以在LeetCode的链表排序这一题检测.本文用到的链表结构如下(排序算法都是传入链表头指针作为参数,返回排序后的头指针) struct ListNode { int val; ...
- 链表排序(冒泡、选择、插入、快排、归并、希尔、堆排序)
这篇文章分析一下链表的各种排序方法. 以下排序算法的正确性都可以在LeetCode的链表排序这一题检测.本文用到的链表结构如下(排序算法都是传入链表头指针作为参数,返回排序后的头指针) struct ...
最新文章
- linux qml 环境,利用Qml与Golang打造Gui客户端(二)qamel环境安装
- 基于Flink SQL构建流批一体实时数仓
- 为什么微信内无法分享转发网址,详谈微信网址防屏蔽的办法
- fabric sdk php,Hyperledger Fabric PHP SDK
- 监测div大小变化_CSS怎么实现div随着网页的大小变化而变化呢?
- 页面文件太小无法完成操作_PPT操作界面基础解析
- Linux 命令 (tar,权限,管道)
- Linux高级编程--06.进程概述
- 【论文整理】NAACL2019+AAAI2019文本分类论文摘要
- JVM 为什么使用元空间替换了永久代
- iis如何连接mysql_iis怎么连接数据库
- MISRA C指导指南解读系列1(MISRA C是什么)
- python毕业论文参考文献格式_毕业论文参考文献规范格式
- iPhone12打开webview闪退或者白屏
- My summery
- 魔法师元素平衡(C++解法)
- 正则表达式匹配标签里面的内容
- RINEX 2.11 观测值文件格式说明
- 通信原理笔记—模拟信号的数字编码
- deep Learning 之入门一 (ps:知乎上看到的大佬写的非常好,所以自己记录下)
热门文章
- 扎克伯格正用“山寨”策略碾压Snapchat
- mysql报错:You must at least set –server-id to enable either a master or a slave
- Linux_MySQL下(4) 未整理
- Resteasy配置及其使用
- 爱了爱了!0.052 秒打开 100GB 数据,这个开源库火爆了!
- IDEA 的这款插件真是逆天了,代码那都不是事!
- 高并发、高性能 Web 架构
- 国外大神整理的 2019 年 Java 权威开发路线图,Java大神养成记
- 使用 shell 在多服务器上批量操作
- 2018只剩32天,动着心思想跳槽的你,还要YY到什么时候