Leetcode-sort-list
来源:互联网 发布:sweetalert.js 编辑:程序博客网 时间:2024/06/04 17:52
题目描述
Sort a linked list in O(n log n) time using constant space complexity.
链表排序,要求时间负责度为0(n log n),可以看出来我们需要利用归并排序比较好。
下面结合代码解释解题思路:
* class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNode sortList(ListNode head) { if(head == null || head.next == null) return head; ListNode middle = findMiddle(head); //首先找到中间节点 ListNode right = sortList(middle.next); //对右边子链表进行排序 middle.next = null; ListNode left = sortList(head); //对左边子链表进行排序 return mergeTwoLists(left, right); //返回左右子链表的合并结果 } public static ListNode mergeTwoLists(ListNode l1, ListNode l2){ if(l1 == null) return l2; if(l2 == null) return l1; ListNode dummy = new ListNode(0); //dummy节点用于记住头节点的上一个节点,最后需要返回头节点,用dummy.next返回 ListNode head = dummy; while(l1 != null && l2 != null){ if(l1.val > l2.val){ head.next = l2; l2 = l2.next; } else{ head.next = l1; l1 = l1.next; } head = head.next; } //如果左右两边有一个子链表元素都排完了,则把另一个子链表直接插在head后头 if(l1 == null) head.next = l2; if(l2 == null) head.next = l1; return dummy.next; } public ListNode findMiddle(ListNode head){ //找到中间节点,定义两个指针,一个走一步a,一个走两步b,最终b指针停下来的时候,a指针刚好停在中间位置 ListNode chaser = head; ListNode runner = head.next; while(runner != null && runner.next != null){ chaser = chaser.next; runner = runner.next.next; } return chaser; }}
0 0
- [leetcode][list][sort] Sort List
- Insertion Sort List | leetcode
- Leetcode: Insertion Sort List
- [LeetCode] Insertion Sort List
- Leetcode: Insertion Sort List
- Leetcode: Sort List
- Sort List | leetcode
- leetcode-Sort List
- leetcode-Insertion Sort List
- LeetCode题解:Sort List
- leetcode 134: Sort List
- [LeetCode]Sort List
- [LeetCode]Insertion Sort List
- [LeetCode] Sort List
- 【LeetCode】Insertion Sort List
- leetCode - Sort List
- LeetCode | Insertion Sort List
- LeetCode - Insertion Sort List
- 码神第三天学习(加作业)
- 深度学习与自然语言处理(7)_斯坦福cs224d 语言模型,RNN,LSTM与GRU
- Notification
- 冯诺依曼工作方式的基本特点是____
- Linux GCC常用命令
- Leetcode-sort-list
- text().toInt(&ok)获取标签控件字符串的方法
- 浅谈essay、paper和dissertation的区别
- 2016年7月17日学习 scratch 小兔子偷胡萝卜的故事
- C++中虚函数表存储位置浅析
- Docker Universal Control Plane(UCP)——提供企业级的容器云的解决方案
- 常用的性能优化手段(内存优化方法)
- OpenGL-创建视口
- UIImage加载图片的方式以及Images.xcassets对于加载方法的影响