public static SinglyLinkedListNode condense(SinglyLinkedListNode head) {
if (head == null) return null;
HashSet seen = new HashSet<>();
SinglyLinkedListNode curr = head;
SinglyLinkedListNode prev = null;
while (curr != null) {
if (seen.contains(curr.data)) {
// Duplicate → remove the node
prev.next = curr.next;
} else {
// First time seeing this value
seen.add(curr.data);
prev = curr;
}
curr = curr.next;
}
return head;
}