zoukankan      html  css  js  c++  java
  • 排序链表

    在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。

    示例 1:

    输入: 4->2->1->3
    输出: 1->2->3->4
    

    示例 2:

    输入: -1->5->3->4->0
    输出: -1->0->3->4->5


    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode sortList(ListNode head) {
            return head==null?null:mergeSort(head);
        }
        public ListNode mergeSort(ListNode head){
            if(head.next==null){
                return head;
            }
            ListNode p=head,q=head,pre=null;
            while(q!=null&&q.next!=null){
                pre=p;
                p=p.next;
                q=q.next.next;
            }
            pre.next=null;
            ListNode l=mergeSort(head);
            ListNode r=mergeSort(p);
            return merge(l,r);
        }
        public ListNode merge(ListNode l,ListNode r){
            ListNode dummyHead=new ListNode(0);
            ListNode cur=dummyHead;
            while(l!=null&&r!=null){
                if(l.val<r.val){
                    cur.next=l;
                    cur=cur.next;
                    l=l.next;
                }
                else{
                    cur.next=r;
                    cur=cur.next;
                    r=r.next;
                }
               
            }
            if(l!=null){
                cur.next=l;
            }
            if(r!=null){
                cur.next=r;
            }
            return dummyHead.next;
        }
    }
  • 相关阅读:
    机器学习:特征选择方法简介
    VS快捷键
    非常适用的Sourceinsight插件,提高效率【强力推荐】
    Linux静态库和共享库
    C/C++ 位域知识小结
    __BEGIN_DECLS 和 __END_DECLS
    C语言可变参数va_list
    mac的terminal快捷键
    linux进程、线程与cpu的亲和性(affinity)
    C++ Singleton (单例) 模式最优实现
  • 原文地址:https://www.cnblogs.com/yihangZhou/p/10046258.html
Copyright © 2011-2022 走看看