zoukankan      html  css  js  c++  java
  • 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;
             }
         }
    }
  • 相关阅读:
    课堂讨论电子版
    轻量级推送及在此基础上的即时通讯探索(1)
    第十章 Android的消息机制
    第十一章 Android的线程和线程池
    第八章 理解Window和WindowMannager
    第四章 View的工作原理
    第三章 View的事件体系
    第二章 IPC
    Android独立音量播放器
    SpringMVC笔记
  • 原文地址:https://www.cnblogs.com/nashiyue/p/3920268.html
Copyright © 2011-2022 走看看