1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| import utils.ListNode;
public class ReorderList {
public static void main(String[] args){ ListNode a = new ListNode(1); ListNode b = new ListNode(2); ListNode c = new ListNode(3); ListNode d = new ListNode(4); a.next = null;
a.next = b;
reorderList(a); } public static void reorderList(ListNode head) { ListNode dump = head; ListNode slow = head; ListNode fast = head; while(fast!=null && fast.next != null){ slow = slow.next; fast = fast.next.next; } ListNode mid = slow.next; ListNode l1 = head; ListNode l2 = mid;
while(head.next != l2){ head = head.next; } head.next = null;
ListNode p = l2; ListNode q = p.next; boolean first = true; while(q!= null){ ListNode t = q.next; q.next = p; if (first){ p.next = null; first = false; } p = q; q = t; }
l2 = p; p = l1; q = l2;
print(l1); print(l2);
while(l2 != null){
p = p.next; q = q.next;
l1.next = l2; l2.next = p;
l2 = q; l1 = p;
} print(dump); }
public static void print(ListNode head){ ListNode t = head; while(t!= null){ System.out.print(t.val+" "); t = t.next; } System.out.println(); } }
|