LeetCode刷题笔录 Reorder List
来源:互联网 发布:linux系统操作命令 编辑:程序博客网 时间:2024/06/05 11:27
Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…
You must do this in-place without altering the nodes' values.
For example,
Given {1,2,3,4}
, reorder it to {1,4,2,3}
.
在ctci的链表那节有个类似的题。这里这道题要多一步反转链表而已。
1.把链表从中间分成前后两部分。如果链表长度是奇数,那么前面的链表长度多一。
2.把后半部分链表反转
3.再把两个链表合并
没有用到extra space,时间复杂度O(n)
public class Solution { public void reorderList(ListNode head) { if(head == null) return; //divide the list into two lists ListNode fast = head; ListNode slow = head; while(fast.next != null){ fast = fast.next; if(fast.next != null){ fast = fast.next; } else{ break; } slow = slow.next; } //reverse the second part ListNode secondHead = reverseList(slow.next); slow.next = null; //merge the two lists merge(head, secondHead); } public ListNode reverseList(ListNode node){ ListNode p = node; if(p == null || p.next == null) return p; ListNode q = p.next; p.next = null; while(q != null){ ListNode r = q.next; q.next = p; p = q; q = r; } return p; } public void merge(ListNode node1, ListNode node2){ ListNode p = node1; ListNode q = node2; while( p != null && q != null){ ListNode r = p.next; ListNode m = q.next; p.next = q; q.next = r; p = r; q = m; } }}
0 0
- LeetCode刷题笔录 Reorder List
- LeetCode刷题笔录 Rotate List
- LeetCode刷题笔录Linked List Cycle
- LeetCode刷题笔录Partition List
- LeetCode刷题笔录Sort List
- LeetCode刷题笔录Remove Duplicates From Sorted List
- LeetCode刷题笔录Linked List Cycle II
- LeetCode刷题笔录Flatten Binary Tree to Linked List
- LeetCode刷题笔录Reverse Linked List II
- LeetCode刷题笔录Remove Duplicates from Sorted List II
- [leetcode][list] Reorder List
- [leetcode][list] Reorder List
- leetcode 刷题之路 17 Reorder List
- 开始刷leetcode day 16:Reorder List
- [LeetCode 第9题] -- Reorder List
- 【leetcode每日一题】Reorder List
- Leetcode: Reorder List
- [LeetCode] Reorder List
- 使用graphviz dot来画图表
- 使用暴力反射让Spinner选择同一选项时触发onItemSelected事件
- ZK Intbox的Constraint
- php伪静态的一些注意事项
- fedora64位下配置android报错解决方案
- LeetCode刷题笔录 Reorder List
- 【UX】【Android动画】之Tween动画 (渐变、缩放、位移、旋转)
- Configure,Makefile.am, Makefile.in, Makefile文件之间关系
- 文件最后修改时间
- 查询mysql数据库的最后一条记录
- 【UX】Android动画学习笔记-Android Animation
- DataReader和DataAdapter区分
- JSP pageEncoding 和 contentType 解析
- 达内C++教程学习笔记 (二)