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}
.
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public void reorderList(ListNode head) { if(head != null){ ListNode stepOne = head, stepTwo = head; while(stepTwo.next != null){ if(stepTwo.next != null) stepTwo = stepTwo.next; if(stepTwo.next != null){ stepTwo = stepTwo.next; stepOne = stepOne.next; } } if(stepOne.next != null){ stepTwo = stepOne.next; stepOne.next = null; ListNode tailOfSecond = stepTwo; stepOne = stepTwo; if(stepTwo.next != null) stepTwo = stepTwo.next; while(stepTwo.next != null){ ListNode temp = stepTwo.next; stepTwo.next = stepOne; stepOne = stepTwo; stepTwo = temp; } stepTwo.next = stepOne; tailOfSecond.next = null; } stepOne = head; if(stepTwo != stepOne){ while(stepTwo != null){ ListNode temp = stepOne.next; stepOne.next = stepTwo; stepOne = stepOne.next; stepTwo = temp; } } } } }