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}.
[code]
public class Solution {
public void reorderList(ListNode head) {
if(head==null || head.next==null || head.next.next==null)return;
ListNode p=head, q=head.next;
while(q!=null && q.next!=null)
{
p=p.next;
q=q.next.next;
}
q=p.next;
p.next=null;
p=head;
ListNode prev=null;
while(q!=null)
{
ListNode next=q.next;
q.next=prev;
prev=q;
q=next;
}
q=prev;
while(q!=null)
{
ListNode next=q.next;
q.next=p.next;
p.next=q;
p=q.next;
q=next;
}
}
}