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;
}
}
分享到:
相关推荐
Go语言的标准库中提供了容器/runner、container/list、container/heap等包,可以方便地实现这些数据结构。 4. **动态规划**:这是一种解决最优化问题的有效方法,通常涉及递推公式和状态转移。Go语言的二维数组或...
例如,在解决搜索和排序问题时,Python内置的`list`数据结构和相关的操作函数如`sort()`、`append()`等,能快速实现各种功能。 接着,我们来看数据结构。在LeetCode中,常见的数据结构包括数组、链表、栈、队列、树...
C++的模板、STL容器(如vector、list、set、map等)、算法库(如sort、find、lower_bound等)都是解决这些问题的有力工具。 对于源码分析,这是学习算法和编程技巧的关键环节。通过阅读和理解他人的代码,我们可以...
- Sort Colors: 给定一个包含红色、白色和蓝色,一共n个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 - Combinations: 从n个不同元素中取出k个元素的组合。 - ...
javascript js_leetcode题解之148-sort-list.js
javascript js_leetcode题解之147-insertion-sort-list.js
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 ...
- **链表(Linked List)**: 由一系列节点组成的集合,每个节点包含数据部分和指向下一个节点的指针。 - **二叉树(Binary Tree)**: 一种树形数据结构,每个节点最多有两个子节点,通常用于实现快速查找和排序操作。 - ...
Reverse-Linked-List-II 要点: - 确定边界条件,定位到起点 - 再利用头插法对指定段的链表逆序 链表逆序之头插法,关键代码(牢记): pre.next = cur.next; cur.next = head.next; head.next = cur; ...
一.(Sort类): 350. Intersection of Two Arrays II a.首先用HashMap遍历一遍数组nums1,Key值储存数组元素,Value(初始值为1)值储存重复元素出现次数,每出现一次加1; b.用List储存nums2中与nums1开始...
python python_leetcode题解之147_Insertion_Sort_List
List 链表 Math 数学 MySQL 数据库 Queue 队列 Recursion 递归 Sliding Window 滑动窗口 Sort 排序 Stack 栈 String 字符串 TreeNode 二叉树 UnionFind 并查集 文件: x-xxx-xxx.php 方法文件 文件前缀: e = Easy m...
2. **排序算法**:Python的`sorted()`函数和`list.sort()`方法为我们提供了排序的能力。而在更复杂的问题中,如快速排序、归并排序等高级排序算法也有应用。通过阅读这些解法,我们可以学习如何在Python中实现高效...
1.1常数级链表排序Sort a linked list in O(n log n) time using constant space complexity.
Python的内置函数`sorted()`和`list.sort()`可以方便地对数据进行排序,但理解其内部机制对于优化和自定义排序算法至关重要。 2. **搜索算法**:二分查找、深度优先搜索(DFS)和广度优先搜索(BFS)等是解题的关键...
Arrays.sort(Object[])和Collections.sort(List)保证是稳定的。 如果需要部分排序,这对于保留原始排序很有用: 堆 对于Java,数据结构是PriorityQueue; 对于 Python,请参阅 heapq 中的函数 K 最小/最大元素来自:...
熟悉STL(Standard Template Library)中的容器(如vector、list、set、map)和算法(如sort、find)也是必不可少的。 2. 面向对象编程:C++支持面向对象编程,类和对象的概念在设计复杂解决方案时特别有用,如封装...
排序与搜索是常见的算法问题,Python内置的排序函数`sorted()`和`list.sort()`在大多数情况下已经足够高效,但面对特定的性能需求,你可能需要掌握快速排序、归并排序等高级排序算法。搜索方面,线性搜索、二分查找...
在C++中,解决LeetCode问题时,开发者可能会使用STL中的容器(如vector、list、set、map等)来存储和操作数据,用算法(如sort、find、lower_bound等)来处理复杂逻辑。此外,C++的函数模板和类模板也常用于编写通用...
2. **列表(List)**:Python中的列表是一种动态大小的有序集合,可以容纳不同类型的元素。它支持索引、切片、遍历以及多种内置操作,如append()、extend()和sort()等。 3. **字典(Dictionary)**:字典是Python的另一...