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
| package com.demo.s143;
class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val; this.next = next; } }
public class Solution { public void reorderList(ListNode head) { if(head == null) { return; } ListNode mid = findMid(head); ListNode l1 = head; ListNode l2 = mid.next; mid.next = null; l2 = reverseList(l2); mergeList(l1, l2); }
public ListNode findMid(ListNode head) { ListNode fast = head; ListNode slow = head; while(fast != null && fast.next!= null && fast.next.next != null) { fast = fast.next.next; slow = slow.next; } return slow; }
public ListNode reverseList(ListNode head) { ListNode pre = null; ListNode cur = head; while(cur != null) { ListNode tmp = cur.next; cur.next = pre; pre = cur; cur = tmp; } return pre; }
public void mergeList(ListNode l1, ListNode l2) { while(l1 != null && l2 != null) { ListNode l1_tmp = l1.next; ListNode l2_tmp = l2.next; l1.next = l2; l2.next = l1_tmp;
l1 = l1_tmp; l2 = l2_tmp;
} } }
|