新博文地址:[leetcode]Sort List
Sort List
Sort a linked list in O(n log n) time using constant space complexity.
题中要求以O(n log n)的时间复杂度完成排序,并且只能开常数个空间。一般而言,满足O(n log n)的条件,第一直觉就是快排和归并,但是鉴于快排要往前迭代,但是题中要求是单链表,因此选择归并排序。
至于归并排序的就不多说了,具体的做法是用递归实现
1. 将链表一分为二(找中点方法有二: 1. 计算中间节点的index(list.size/2)2 快慢指针,我很蛋疼的选了2)
2. 分别对两个半截链表排序(递归实现)
3. 将两个排好序的半截链表进行merge
public class Solution { public ListNode sortList(ListNode head) { if(head == null || head.next == null){ return head; } ListNode pre = head; ListNode post = getMid(head); pre = sortList(pre); post = sortList(post); return mergeList(pre,post); } public ListNode mergeList(ListNode pre,ListNode post){ ListNode head = new ListNode(0); ListNode tail = head; while(pre != null || post != null){ if(pre == null){ tail.next = post; break; }else if(post == null){ tail.next = pre; break; }else{ if(pre.val < post.val){ tail.next = pre; pre = pre.next; }else{ tail.next = post; post = post.next; } tail = tail.next; } } return head.next; } public ListNode getMid(ListNode head){ ListNode fast = head; ListNode slow = head; while(fast.next != null && fast.next.next != null ){ fast = fast.next.next; slow = slow.next; } ListNode mid = slow.next; slow.next = null; return mid; } }
归并排序是最基本最重要的算法之一,用了分治法,需要熟练掌握
相关推荐
javascript js_leetcode题解之148-sort-list.js
python python_leetcode题解之147_Insertion_Sort_List
* [Linked List](https://github.com/kamyu104/LeetCode#linked-list) * [Stack](https://github.com/kamyu104/LeetCode#stack) * [Queue](https://github.com/kamyu104/LeetCode#queue) * [Heap]...
javascript js_leetcode题解之147-insertion-sort-list.js
例如,在解决搜索和排序问题时,Python内置的`list`数据结构和相关的操作函数如`sort()`、`append()`等,能快速实现各种功能。 接着,我们来看数据结构。在LeetCode中,常见的数据结构包括数组、链表、栈、队列、树...
Sort Colors LeetCode 125 Valid Palindrome LeetCode 167 Two Sum II - Input array is sorted LeetCode 344 Reverse String LeetCode 345 Reverse Vowels of a String 2 字符串 编号 题目 LeetCode 3 Longest ...
- **Sort List**:对链表进行排序。 - **Rotate List**:将链表顺时针旋转指定次数。 - **Reorder List**:按照特定规则重新排列链表。 - **Partition List**:将链表按值分割成两个部分。 - **Add Two Numbers...
**1.12 Insertion Sort List (147)** - **问题描述**:对链表进行插入排序。 - **解题思路**: - 创建一个虚拟头节点,用于记录排序后的链表起始位置。 - 依次将原链表中的节点插入到已排序部分的适当位置。 **...
Python的内置数据结构如list、dict、set、tuple等都能在这些题目中大显身手。理解它们的特性和操作方法是解决问题的关键。 2. **递归与回溯**:在算法中,递归和回溯经常用于解决复杂的问题,例如搜索、图遍历或...
如数组(array)、链表(linked list)、字符串(string)、哈希表(hashtable)、栈(stack)、队列(queue)、二叉树(binary tree)、图(graph)、动态规划(DP)、数学问题(Math)、双指针技巧(Two Pointers...
2. **C++标准库**:C++标准库提供了大量预先定义的函数和数据结构,如容器(vector、list、set、map)、迭代器、算法(排序、查找)等。在解题过程中,这些工具被广泛用于优化算法和提高代码效率。 3. **数据结构**...
- **STL库**:利用标准模板库(STL)中的容器(如vector、list、set)、算法(如sort、find)和迭代器来简化代码。 - **模板和泛型编程**:当需要编写可重用的代码时,可以使用模板来实现泛型功能。 - **面向对象...
list 2017.06.13 打卡[LeetCode 200. Number of Islands], BFS 2017.06.14 打卡[LeetCode 3. Longest Substring Without Repeating Characters], N/A 2017.06.15 打卡[LeetCode 407. Trapping Rain Water II], BFS/...
STL(标准模板库)提供了丰富的数据结构和算法,如 vector、list、map、set、sort 等,极大地简化了编程工作;同时,C++ 的内存管理更加灵活,允许程序员直接操作指针,这对于理解和优化算法性能非常有帮助。 "cpp-...
- Sort Colors: 给定一个包含红色、白色和蓝色,一共n个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 - Combinations: 从n个不同元素中取出k个元素的组合。 - ...
- **链表(Linked List)**: 由一系列节点组成的集合,每个节点包含数据部分和指向下一个节点的指针。 - **二叉树(Binary Tree)**: 一种树形数据结构,每个节点最多有两个子节点,通常用于实现快速查找和排序操作。 - ...
5. **STL库**:标准模板库(STL)提供了大量现成的数据结构和算法,如容器(vector、list、set等)、算法(sort、find等)和迭代器,熟练运用STL可以简化代码并提高代码质量。 6. **异常处理**:在编写C++代码时,...
leetcode中325题python leetcode 以 参考 和 Hash相关 1_两数之和 387_字符串中的第一个唯一字符 链表操作 2 ...删除链表的倒数第N个节点 ...sort-list 234 回文链表 palindrome-linked-list 双指针遍历/滑动
最大公共字符串leetcode leetcode 数组 链表 二叉树 位操作 判断字符串的顺序排列 给定一个字符串数组,将字谜组合在一起。 例如,给定:["eat", "tea", "tan", "ate", "nat", "bat"], public class Solution { ...