leetcode oj java 143. Reorder List
来源:互联网 发布:编程电极怎么编 编辑:程序博客网 时间:2024/05/20 23:06
一、问题描述:
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}
二、解决思路:
例如链表为 1 2 3 4 5 6 7 8 9 10 那么我们想得到的是 1 10 2 9 3 8 4 7 6 5 分解如下:
可以看到得到的list可以看做两个list交叉插入得到的。 list1是原来list 的前 (n+1)/2 个, list2是原来的List的 后半部分。
我们首先用快慢指针的方法(快指针每次都两格,慢指针每次走一格)找到中间节点。将list分为两部分list1和list2,并把list2翻转。随后将list2间隔的插入
到list1中即可。
三、代码:
package T01;/** * @author 作者 : xcy * @version 创建时间:2017年1月15日 下午2:13:08 * 类说明 */public class t143 { public static void main(String[] args) { // TODO Auto-generated method stub ListNode head = new ListNode(0); ListNode l1 = new ListNode(1); ListNode l2 = new ListNode(2); ListNode l3 = new ListNode(3); ListNode l4 = new ListNode(4); ListNode l5 = new ListNode(5); ListNode l6 = new ListNode(6); ListNode l7 = new ListNode(7); ListNode l8 = new ListNode(8); ListNode l9 = new ListNode(9); ListNode l10 = new ListNode(10); head.next = l1; l1.next = l2; l2.next = l3; l3.next = l4; l4.next = l5; l5.next = l6; l6.next = l7; l7.next = l8; l8.next = l9; l9.next = l10; reorderList(head); while (head != null) { System.out.println(head.val); head = head.next; } } public static void reorderList(ListNode head) { // split; if (head == null || head.next == null) { return; } ListNode p1 = head; ListNode p2 = head; while (p2 != null && p2.next != null) { p2 = p2.next; if (p2 != null && p2.next != null) { p2 = p2.next; } else { break; } p1 = p1.next; } ListNode tmp1 = head; ListNode tmp2 = p1.next; p1.next = null; //reverse tmp2 ListNode tmp2_new = null; while (tmp2 != null) { ListNode ex = tmp2; tmp2 = tmp2.next; ex.next = tmp2_new; tmp2_new = ex; } // merge p1 = tmp1; p2 = tmp2_new; while (p1 != null && p2 != null) { ListNode t1 = p1.next; ListNode t2 = p2.next; p1.next = p2; p2.next = t1; p1 = t1; p2 = t2; } head = tmp1; }}
0 0
- leetcode oj java 143. Reorder List
- LeetCode OJ:Reorder List
- LeetCode OJ - Reorder List
- LeetCode OJ Reorder List
- [LeetCode] 143. Reorder List java
- [Leetcode] Reorder List (Java)
- Reorder List leetcode java
- [LeetCode]--143. Reorder List(Python + Java)
- [LeetCode]143.Reorder List
- LeetCode 143. Reorder List
- [leetcode] 143.Reorder List
- leetcode 143. Reorder List
- 143. Reorder List LeetCode
- LeetCode 143. Reorder List
- LeetCode 143. Reorder List
- LeetCode 143. Reorder List
- LeetCode *** 143. Reorder List
- [Leetcode] 143. Reorder List
- 问题三十五: 怎么用ray tracing画二次曲面(quadratic surfaces)(4)——双曲抛物面(马鞍面)
- HDU-1698-Just A Hook (线段树区间修改,区间查询)
- Android微信支付开发
- 3D射线拾取算法揭秘
- NDK编程的一个坑—Arm平台下的类型转换
- leetcode oj java 143. Reorder List
- 四个月的蜕变之单例模式创建线程池和使用
- 《Head First设计模式》-工厂模式C++实现
- python 2-5 如何快速找到多个字典中的(key) viewkeys(集合)/reduce(lambda a,b:a&b,map(d.keys(),[d1,d2])
- zoj2314
- mysql5.7 修改默认密码
- POJ-1562(DFS)
- linux 用户和组管理
- 派生类和继承——(二)