Вы уже взяли ссылку на узел Node в переменной Node ref, и вы использовали заголовок Node для обхода, поэтому просто верните переменную Node ref в конце. Это даст вам желаемый результат, учитывая, что остальная часть кода верна.
Попробуйте это:
final Node ref = head;
final Set<Integer> s = new HashSet<Integer>();
/*
* while (null != head.next) { final Node rn = head.next; if (!s.add(head.next.data)) { if (null !=
* head.next.next) { head.next = head.next.next; } } head = rn; }
*/
while (null != head.next) {
// final Node rn = head.next;
if (!s.add(head.data)) {
if (null != head.next) {
head = head.next;
}
}
head = head.next;
}
final boolean b1 = s.add(head.data);
if (b1 == false) {
head = null;
}
return ref;
Снять головку = ref!
Или, если вы хотите использовать набор для удаления дубликатов из связанного списка, вы можете использовать LinkedHashSet, LinkedHashSet поддерживает порядок вставки, подход представлен ниже:
if(head==null)
return null;
Node n = head;
LinkedHashSet<Integer> lSet = new LinkedHashSet<>();
while(n.next!=null){
lSet.add(n.data);
n = n.next;
}
lSet.add(n.data);
Iterator<Integer> it = lSet.iterator();
Node newHead = new Node(it.next());
Node listNodes = newHead;
while(it.hasNext()){
listNodes.next = new Node(it.next());
listNodes = listNodes.next;
}
return newHead;