Result: Evaluating...
// Phase 1: Find Middle
ListNode slow = head, fast = head;
while (fast != null && fast.next != null) {
    slow = slow.next; fast = fast.next.next;
}
// Phase 2: Reverse Second Half
ListNode prev = null, curr = slow;
while (curr != null) {
    ListNode nextTemp = curr.next;
    curr.next = prev; prev = curr; curr = nextTemp;
}
// Phase 3: Compare Halves
ListNode p1 = head, p2 = prev;
while (p2 != null) {
    if (p1.val != p2.val) return false;
    p1 = p1.next; p2 = p2.next;
}
return true;
Initializing...
Step: 0 / 0