`

Leetcode - Sort List

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

[分析] 将链表二分,递归排序子链表,然后merge 已排序的两子链表。

public class Solution {
    public ListNode sortList(ListNode head) {
        if (head == null || head.next == null)
            return head;
        // split the list in a 2 pointer style
        ListNode p = head, q = head;
        while (q.next != null) {
            q = q.next;
            if (q.next != null) {
                q = q.next;
                p = p.next;
            }
        }
        // sort 2 sublists
        ListNode half1 = head, half2 = p.next;
        p.next = null;
        half1 = sortList(half1);
        half2 = sortList(half2);
        // merge 2 sublist
        ListNode dummy = new ListNode(0);
        p = dummy;
        while (half1 != null && half2 != null) {
            if (half1.val < half2.val) {
                dummy.next = half1;
                half1 = half1.next;
            } else {
                dummy.next = half2;
                half2 = half2.next;
            }
            dummy = dummy.next;
        }
        if (half1 != null) {
            dummy.next = half1;
        }
        if (half2 != null) {
            dummy.next = half2;
        }
        return p.next;
    }
}
分享到:
评论

相关推荐

    Algorithm-leetcode-go.zip

    Go语言的标准库中提供了容器/runner、container/list、container/heap等包,可以方便地实现这些数据结构。 4. **动态规划**:这是一种解决最优化问题的有效方法,通常涉及递推公式和状态转移。Go语言的二维数组或...

    LeetCode-Python代码.rar

    例如,在解决搜索和排序问题时,Python内置的`list`数据结构和相关的操作函数如`sort()`、`append()`等,能快速实现各种功能。 接着,我们来看数据结构。在LeetCode中,常见的数据结构包括数组、链表、栈、队列、树...

    leetcode-cpp_leetcode_C++_算法_源码分析_剑指offer_

    C++的模板、STL容器(如vector、list、set、map等)、算法库(如sort、find、lower_bound等)都是解决这些问题的有力工具。 对于源码分析,这是学习算法和编程技巧的关键环节。通过阅读和理解他人的代码,我们可以...

    _leetcode-python.pdf

    - Sort Colors: 给定一个包含红色、白色和蓝色,一共n个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 - Combinations: 从n个不同元素中取出k个元素的组合。 - ...

    js-leetcode题解之148-sort-list.js

    javascript js_leetcode题解之148-sort-list.js

    js-leetcode题解之147-insertion-sort-list.js

    javascript js_leetcode题解之147-insertion-sort-list.js

    leetcode摇摆-Leetcode-Learning:Leetcode-学习

    leetcode摇摆Leetcode-学习 2020/02/02 完成 Q29 & 35 2020/02/05 成品 Q58 split() function: str.split( ) means Space-separated Q69 math.sqrt() 2020/02/11 成品 Q299 Remove all rigth position element and ...

    算法-leetcode-剑指offer上的题很多

    - **链表(Linked List)**: 由一系列节点组成的集合,每个节点包含数据部分和指向下一个节点的指针。 - **二叉树(Binary Tree)**: 一种树形数据结构,每个节点最多有两个子节点,通常用于实现快速查找和排序操作。 - ...

    leetcodeoj和leetcode-leetcode-in-java:这是leetcode学习笔记。(在Java中)

    Reverse-Linked-List-II 要点: - 确定边界条件,定位到起点 - 再利用头插法对指定段的链表逆序 链表逆序之头插法,关键代码(牢记): pre.next = cur.next; cur.next = head.next; head.next = cur; ...

    LeetCode判断字符串是否循环-Leetcode-Java-:Leetcode-Java-

    一.(Sort类): 350. Intersection of Two Arrays II a.首先用HashMap遍历一遍数组nums1,Key值储存数组元素,Value(初始值为1)值储存重复元素出现次数,每出现一次加1; b.用List储存nums2中与nums1开始...

    python-leetcode题解之147-Insertion-Sort-List

    python python_leetcode题解之147_Insertion_Sort_List

    leetcode题库-LeetCode-PHP:LeetCode算法题

    List 链表 Math 数学 MySQL 数据库 Queue 队列 Recursion 递归 Sliding Window 滑动窗口 Sort 排序 Stack 栈 String 字符串 TreeNode 二叉树 UnionFind 并查集 文件: x-xxx-xxx.php 方法文件 文件前缀: e = Easy m...

    leetcode-cn-solutions:https

    2. **排序算法**:Python的`sorted()`函数和`list.sort()`方法为我们提供了排序的能力。而在更复杂的问题中,如快速排序、归并排序等高级排序算法也有应用。通过阅读这些解法,我们可以学习如何在Python中实现高效...

    maycope#Leetcode-Classic#1.1常数级链表排序1

    1.1常数级链表排序Sort a linked list in O(n log n) time using constant space complexity.

    leetcode答案-Leetcode-Python:Leetcode算法

    Python的内置函数`sorted()`和`list.sort()`可以方便地对数据进行排序,但理解其内部机制对于优化和自定义排序算法至关重要。 2. **搜索算法**:二分查找、深度优先搜索(DFS)和广度优先搜索(BFS)等是解题的关键...

    leetcode中等题时间-leetcode-common-patterns:LeetCode问题的常见模式和有用技巧

    Arrays.sort(Object[])和Collections.sort(List)保证是稳定的。 如果需要部分排序,这对于保留原始排序很有用: 堆 对于Java,数据结构是PriorityQueue; 对于 Python,请参阅 heapq 中的函数 K 最小/最大元素来自:...

    Leetcode-Solutions:解决leetcode问题

    熟悉STL(Standard Template Library)中的容器(如vector、list、set、map)和算法(如sort、find)也是必不可少的。 2. 面向对象编程:C++支持面向对象编程,类和对象的概念在设计复杂解决方案时特别有用,如封装...

    leetcode-bbbbrent:让代码在Leetcode中

    排序与搜索是常见的算法问题,Python内置的排序函数`sorted()`和`list.sort()`在大多数情况下已经足够高效,但面对特定的性能需求,你可能需要掌握快速排序、归并排序等高级排序算法。搜索方面,线性搜索、二分查找...

    leetcode-quaint-2021:leetcode古雅

    在C++中,解决LeetCode问题时,开发者可能会使用STL中的容器(如vector、list、set、map等)来存储和操作数据,用算法(如sort、find、lower_bound等)来处理复杂逻辑。此外,C++的函数模板和类模板也常用于编写通用...

    LeetCode-Challenges-2021:我针对leetcode挑战的解决方案集合

    2. **列表(List)**:Python中的列表是一种动态大小的有序集合,可以容纳不同类型的元素。它支持索引、切片、遍历以及多种内置操作,如append()、extend()和sort()等。 3. **字典(Dictionary)**:字典是Python的另一...

Global site tag (gtag.js) - Google Analytics