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 [email protected]
 */

/**
 * 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源码]

时间: 2024-10-14 06:17:37

LeetCode-Sort List[AC源码]的相关文章

LeetCode-Insertion Sort List[AC源码]

1 package com.lw.leet5; 2 3 /** 4 * @ClassName:Solution 5 * @Description: 6 * Insertion Sort List 7 * Sort a linked list using insertion sort. 8 * @Author LiuWei 9 * @Date 2014年8月20日下午7:50:07 10 * @Mail [email protected] 11 */ 12 public class Solutio

LeetCode-Reverse Words in a String[AC源码]

1 package com.lw.leet1; 2 3 import java.util.Stack; 4 5 /** 6 * @ClassName:Solution 7 * @Description: 8 * Reverse Words in a String 9 * Total Accepted: 26194 Total Submissions: 187094 My Submissions 10 * Given an input string, reverse the string word

LeetCode-Max Points on a Line[AC源码]

1 package com.lw.leet3; 2 3 import java.util.HashMap; 4 import java.util.Iterator; 5 import java.util.Map; 6 import java.util.Map.Entry; 7 8 9 /** 10 * @ClassName:Solution 11 * @Description:Max Points on a Line 12 * Given n points on a 2D plane, find

LeetCode-Evaluate Reverse Polish Notation[AC源码]

1 package com.lw.leet2; 2 3 /** 4 * @ClassName:Solution 5 * @Description: 6 * Evaluate the value of an arithmetic expression in Reverse Polish Notation. 7 * Valid operators are +, -, *, /. Each operand may be an integer or another expression. 8 * 9 *

Spark-1.6.0中的Sort Based Shuffle源码解读

从Spark-1.2.0开始,Spark的Shuffle由Hash Based Shuffle升级成了Sort Based Shuffle.即Spark.shuffle.manager从Hash换成了Sort.不同形式是Shuffle逻辑主要是ShuffleManager的实现类不同. 在org.apache.spark.SparkEnv类中: // Let the user specify short names for shuffle managers val shortShuffleMgr

leetcode(7): Reverse Integer 源码实现 runtime: 8ms

题目 :Reverse Integer Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 题目分析及部分代码解析: 1.需要考虑一位数,比如1,2,3等特殊情况,返回本身. 2.需要考虑0,返回0. 3.需要考虑如123000,45600等末尾有若干零的情况,正确结果应为321.654,不应该出现000321,00654等情况. 4.需要4字节int类型数据的取值范

源码阅读笔记 - 1 MSVC2015中的std::sort

大约寒假开始的时候我就已经把std::sort的源码阅读完毕并理解其中的做法了,到了寒假结尾,姑且把它写出来 这是我的第一篇源码阅读笔记,以后会发更多的,包括算法和库实现,源码会按照我自己的代码风格格式化,去掉或者展开用于条件编译或者debug检查的宏,依重要程度重新排序函数,但是不会改变命名方式(虽然MSVC的STL命名实在是我不能接受的那种),对于代码块的解释会在代码块前(上面)用注释标明. template<class _RanIt, class _Diff, class _Pr> in

STL 源码剖析 算法 stl_algo.h -- merge sort

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie merge sort ---------------------------------------------------------------------- 描述:归并排序 思路: 1.将区间对半分割 2.对左.右段分别排序 3.利用inplace_merge将左.右段合并成为一个完整的有序序列 复杂度:O(nlog n) 源码: template<class Bidirection

STL源码剖析——STL算法之sort排序算法

前言 由于在前文的<STL算法剖析>中,源码剖析非常多,不方便学习,也不方便以后复习,这里把这些算法进行归类,对他们单独的源码剖析进行讲解.本文介绍的STL算法中的sort排序算法,SGI STL中的排序算法不是简单的快速排序,而是交叉利用各种排序:堆排序.插入排序和快速排序:这样做的目的是提高效率,针对数据量比较大的采用快速排序,数据量比较小的可以采用堆排序或插入排序.注意:STL的sort排序算法的迭代器必须是随机访问迭代器. sort排序算法剖析 // Return a random n