private ListNode findMover( ListNode head ) {
        ListNode    p1  =  head;    // move 1 step each step
        ListNode    p2  =  head;    // move 2 steps each step
        
        while ( p2 != null && p2.next != null ) {
            p1  =  p1.next;
            p2  =  p2.next.next;
        }
        
        // 1. cut down the list
        ListNode    ret  =  p1.next;
        p1.next  =  null;
        
        // 2. return the next element of p1
        return ret;
    }