[LeetCode]Reorder List
2016-12-06 15:50
246 查看
Question
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
本题难度Medium。
快慢指针+链表合并
【复杂度】
时间 O(N) 空间 O(1)
【思路】
如果这道题目想要保证成功率我推荐用计数的办法,虽然复杂度高了点但是成功率高。
思路都是一样,先找到中间的节点(可以计数,也可以用快慢指针法),然后将该链表一分为2个子链表,将后面那个子链表reverse,然后合并这两个子链表。
【注意】
第18行是针对后面子链表没有的情况;
第20行是将最后的节点“屁股擦干净”。这里我是提前做了扫尾工作,因为23行后的循环结束了,cur1并不一定指向最后一个节点(比如 1->2->3->4)。
【代码】
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}.
本题难度Medium。
快慢指针+链表合并
【复杂度】
时间 O(N) 空间 O(1)
【思路】
如果这道题目想要保证成功率我推荐用计数的办法,虽然复杂度高了点但是成功率高。
思路都是一样,先找到中间的节点(可以计数,也可以用快慢指针法),然后将该链表一分为2个子链表,将后面那个子链表reverse,然后合并这两个子链表。
【注意】
第18行是针对后面子链表没有的情况;
第20行是将最后的节点“屁股擦干净”。这里我是提前做了扫尾工作,因为23行后的循环结束了,cur1并不一定指向最后一个节点(比如 1->2->3->4)。
【代码】
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ public class Solution { public void reorderList(ListNode head) { //require ListNode slow=head,fast=head; while(fast!=null&&fast.next!=null){ slow=slow.next; fast=fast.next.next; } //如果后面那个子链表没有,那就没必要继续 if(slow==null||slow.next==null)return; ListNode cur1=head,cur2=reverse(slow.next); slow.next=null; //这里的slow就是最终的节点 ListNode tmp=null; //invariant:merge two lists while(cur2!=null){ tmp=cur1.next; cur1.next=cur2; cur2=cur2.next; cur1.next.next=tmp; cur1=tmp; } } private ListNode reverse(ListNode head){ ListNode prev=null,cur=head; while(cur!=null){ ListNode next=cur.next; cur.next=prev; prev=cur; cur=next; } return prev; } }
相关文章推荐
- [Leetcode 143, Medium] Reorder List
- LeetCode题解:Reorder List
- leetcode[143]:Reorder List
- LeetCode:Reorder List
- leetcode 刷题之路 17 Reorder List
- 开始刷leetcode day 16:Reorder List
- Leetcode Reorder List 143
- Leetcode Reorder List
- leetcode:Reorder List
- Reorder List ---LeetCode
- LeetCode Reorder List
- [leetcode] Reorder List
- Reorder List --LeetCode
- [LeetCode]Reorder List
- leetcode之reorder-list
- LeetCode Reorder List
- [LeetCode 143] Reorder List
- [leetcode] Reorder List
- LeetCode --- Reorder List
- 【LeetCode】Reorder List 解题报告