LeetCode-Sort List[AC源码]
package com.lw.leet4; /**
* @ClassName:Solution
* @Description:
* Sort List
* Sort a linked list in O(n log n) time using constant space complexity.
* @Author LiuWei
* @Date 2014年8月18日上午10:17:45
* @Mail nashiyue1314@163.com
*/ /**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/ public class Solution {
public ListNode getMiddleNode(ListNode head){
ListNode slow = head;
ListNode fast = head;
while(fast.next != null && fast.next.next != null){
slow = slow.next;
fast = fast.next.next;
}
return slow;
} public ListNode mergeList(ListNode list1,ListNode list2){
ListNode newHead = new ListNode(-1);
ListNode curNode = newHead;
while(list1 != null && list2 != null){
if(list1.val<= list2.val){
curNode.next = list1;
list1 = list1.next;
}
else{
curNode.next = list2;
list2 = list2.next;
}
curNode = curNode.next;
}
if(list1 == null){
curNode.next = list2;
}
else{
curNode.next = list1;
}
return newHead.next;
} public ListNode sortList(ListNode head) {
if(head == null || head.next == null){
return head;
}
ListNode middleNode = getMiddleNode(head);
ListNode nextNode = middleNode.next;
middleNode.next = null;
return mergeList(sortList(head), sortList(nextNode));
} public static void main(String[] args){
int[] arr = {4,19,14,5,-3,1,8,5,11,15};
ListNode head = new ListNode(arr[0]);
ListNode curr = head;
for(int i=1; i<arr.length; i++){
ListNode node = new ListNode(arr[i]);
curr.next = node;
curr = curr.next;
} ListNode tmp = new Solution().sortList(head);
while(tmp != null){
System.out.println(tmp.val);
tmp = tmp.next;
}
}
}
LeetCode-Sort List[AC源码]的更多相关文章
- LeetCode-Insertion Sort List[AC源码]
package com.lw.leet5; /** * @ClassName:Solution * @Description: * Insertion Sort List * Sort a linke ...
- Spark-1.6.0中的Sort Based Shuffle源码解读
从Spark-1.2.0开始,Spark的Shuffle由Hash Based Shuffle升级成了Sort Based Shuffle.即Spark.shuffle.manager从Hash换成了 ...
- leetcode题库解答源码(python3)
下面和大家分享本人在leetcode上已经ace的题目源码(python3): 本人会持续更新!- class Leetcode_Solution(object): def twoSum_1(self ...
- LeetCode-Max Points on a Line[AC源码]
package com.lw.leet3; import java.util.HashMap; import java.util.Iterator; import java.util.Map; imp ...
- LeetCode-Evaluate Reverse Polish Notation[AC源码]
package com.lw.leet2; /** * @ClassName:Solution * @Description: * Evaluate the value of an arithmeti ...
- LeetCode-Reverse Words in a String[AC源码]
package com.lw.leet1; import java.util.Stack; /** * @ClassName:Solution * @Description: * Reverse Wo ...
- spark源码分析以及优化
第一章.spark源码分析之RDD四种依赖关系 一.RDD四种依赖关系 RDD四种依赖关系,分别是 ShuffleDependency.PrunDependency.RangeDependency和O ...
- springboot源码解析-管中窥豹系列之排序(五)
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ...
- 源码阅读笔记 - 1 MSVC2015中的std::sort
大约寒假开始的时候我就已经把std::sort的源码阅读完毕并理解其中的做法了,到了寒假结尾,姑且把它写出来 这是我的第一篇源码阅读笔记,以后会发更多的,包括算法和库实现,源码会按照我自己的代码风格格 ...
随机推荐
- python 二维矩阵及转byte知识点
1.注意python中的数组和list形式混合: 数组在numpy里面: 2.二维数组这样定义可以修改固定位置的值: rawDataArray_temp = [([0]*nIRImageWidth)f ...
- OOP 学习笔记汇总
1.1 引用 1.2 const关键字 1.3 动态内存分配 1.4 内联函数和重载函数函数参数缺省值 1.5 类和对象的基本概念与用法1 2.1 类和对象的基本概念2
- 论文爬取 & 词频统计2.0
一.Github地址 课程项目要求 队友博客 二.具体分工 031602225 林煌伟 :负责C++部分主要功能函数的编写,算法的设计以及改进优化 031602230 卢恺翔 : 爬虫 ...
- Croc Champ 2013 - Round 1 E. Copying Data 线段树
题目链接: http://codeforces.com/problemset/problem/292/E E. Copying Data time limit per test2 secondsmem ...
- HDU 5265 pog loves szh II 二分
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5265 bc(中文):http://bestcoder.hdu.edu.cn/contests ...
- 团队项目利用Msbuild自定义Task实现增量发布
最近一直在做自动部署工具,主要利用到了Msbuild的自定义Task,通过Task我们可以自定义编译.部署过程减少人工直接干预.Msbuild的详细用法,可以去园子里搜一下,有很多的基础教程,这里就不 ...
- div跟随鼠标移动
1.目标是实现div跟随鼠标而移动,分三种情况进行实现 a)首先获取div,进行绑定鼠标移动事件,给div开启定位功能 第一种实现方式,假如body的大小跟页面大小一样,则可以用这个方法. 1)获取鼠 ...
- [CB] Windows10为什么质量变差 bug越来越多
在 Windows 10 发布之后,微软转向了软件即服务模式,每半年释出一个新版本,通过增加更新频率将新的特性不断推送给用户. 在以前,微软产品发布周期是两到三年,其开发流程分成多个阶段:设计和策划. ...
- p2 入门
心里一片空白,要弄个p2的demo出来... 先了解下p2的概念吧 P2只是一个算法库,以刚体为对象模型,模拟并输出物理碰撞.运动结果.这个过程通过持续调用world中的step()方法来实现 p2的 ...
- scoket常用函数简单介绍
scoket: 是一种抽象层,应用程序通过它来发送和接收数据,使用socket可以将应用程序添加到网络中,与处于同一网络中的其他应用程序进行通信. 简单来说,scoket提供了程序内部与外界通道的 ...