zoukankan      html  css  js  c++  java
  • Leetcode-Sort List

    Sort a linked list in O(n log n) time using constant space complexity.

    Analsys:

    We use Merge Sort.

    NOTE: We should practice other sort algorithm, linke Quick Sort and Heap Sort!

    Solution:

     1 /**
     2  * Definition for singly-linked list.
     3  * class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode(int x) {
     7  *         val = x;
     8  *         next = null;
     9  *     }
    10  * }
    11  */
    12 public class Solution {
    13     public ListNode sortList(ListNode head) {
    14         if (head==null || head.next==null) return head;
    15 
    16         head = sortListRecur(head);
    17         return head;
    18     }
    19 
    20     public ListNode sortListRecur(ListNode head){
    21         int len = 1;
    22         ListNode curNode = head;
    23         while (curNode.next!=null){
    24             curNode = curNode.next;
    25             len++;
    26         }
    27 
    28         if (len==1) return head;
    29         ListNode leftHead = head;
    30         ListNode rightHead = null;
    31         curNode = head;
    32         for (int i=1;i<len/2;i++){
    33             curNode = curNode.next;
    34         }
    35         rightHead = curNode.next;
    36         curNode.next = null;
    37 
    38         leftHead = sortListRecur(leftHead);
    39         rightHead = sortListRecur(rightHead);
    40 
    41         ListNode preHead = new ListNode(0);
    42         ListNode end = preHead;
    43         while (leftHead!=null || rightHead!=null){
    44             if (leftHead==null){
    45                 end.next = rightHead;
    46                 break;
    47             }
    48 
    49             if (rightHead==null){
    50                 end.next = leftHead;
    51                 break;
    52             }
    53 
    54             if (leftHead.val<rightHead.val){
    55                 end.next = leftHead;
    56                 leftHead = leftHead.next;
    57                 end = end.next;
    58             } else {
    59                 end.next = rightHead;
    60                 rightHead = rightHead.next;
    61                 end = end.next;
    62             }
    63         }
    64 
    65         return preHead.next;
    66     }
    67 
    68 }
  • 相关阅读:
    线程池的工作原理
    并发处理之master-worker 模式
    Parrot os引导修复
    使用datax mongodb导数据到postgresql数据库遇到访问权限问题
    10、Flink高可用HA
    9、Standalone集群测试运行
    8、Flink Standalone工作流程
    7、Flink Local模式安装部署
    java读取word文档的文字内容
    对文件内容就行修改-java代码
  • 原文地址:https://www.cnblogs.com/lishiblog/p/4125465.html
Copyright © 2011-2022 走看看