while(fast != null && fast.next != null){ slow = slow.next; fast = fast.next.next; } ListNodecurr= fast == null ? slow : slow.next, prev = null; //make sure curr is the head of the 2nd part while(curr != null){ //reverse the 2nd part of the nodes ListNodetemp= curr.next; //preserve nodes that after current node curr.next = prev; //add previous node to the current node's next prev = curr; //save previous node curr = temp; //update current node } while(head != null && prev != null){ if(head.val != prev.val) returnfalse; prev = prev.next; head = head.next; } returntrue; } }