public static void ReorderList(ListNode head){ if (head == null || head.next == null) //handle edge case return; //split the list use fast and slow pointers ListNode fast = head; ListNode slow = head; while (fast.next != null && fast.next.next != null) { fast = fast.next.next; slow = slow.next; } ListNode second = slow.next; slow.next = null; //final step for splitting list, cut two lists off //reverse second list second = ReverseList (second); ListNode first = head; while (first != null && second != null) { ListNode temp1 = first.next; ListNode temp2 = second.next; second.next = first.next; first.next = second; first = temp1; second = temp2; } }
private static ListNode ReverseList(ListNode head){ //reverse the list if (head == null || head.next == null) //handle edge case return head; ListNode current = head; ListNode next = head.next; while (next != null) { ListNode temp = next.next; next.next = current; current = next; next = temp; } head.next = null; //set original head.next to null return current; }
public ListNode(int v){ this.val = v; this.next = null; }