Почему мой код не удаляет дубликаты узлов?Мой вывод все еще 12311 - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь удалить дубликаты узлов в несортированном связанном списке.Тем не менее, мой вывод вообще не меняет связанный список.

Я пытался заменить этот код:

            list.add(new Node(1));
    list.add(new Node(2));
    list.add(new Node(3));
    list.add(new Node(1));
    list.add(new Node(1));

на

            Node firstNode = new Node(1);
            Node secondNode = new Node(2);
            Node thirdNode = new Node(3);
            Node fourthNode = new Node(1);
            Node fifthNode = new Node(1);

            firstNode.next = secondNode;
            secondNode.next = thirdNode;
            thirdNode.next = fourthNode;
            fourthNode.next = fifthNode;

            list.add(firstNode);
    list.add(secondNode);
    list.add(thirdNode);
    list.add(fourthNode);
    list.add(fifthNode);

, но все равно не повезло.

import java.util.HashSet;
import java.util.LinkedList;

class Node {

  public int value;
  public Node next;

  public Node(int value) {
    this.value = value;
  }  
}

class LinkedLists {

  Node head;

  public static void removeDups(Node n) {

    HashSet<Integer> set = new HashSet<Integer>();
    Node prev = null;

    if (n == null) {
        return;
    }

    while(n != null) {

        if (set.contains(n.value)) {
            prev.next = n.next;
        } else {
            set.add(n.value);
            prev = n;
        }
        n = n.next;
    }           
}

public static void main(String[] args) {

    LinkedList<Node> list = new LinkedList<Node>();

    list.add(new Node(1));
    list.add(new Node(2));
    list.add(new Node(3));
    list.add(new Node(1));
    list.add(new Node(1));

    removeDups(list.getFirst());

    for (int i = 0; i < list.size(); ++i) {
        System.out.print(list.get(i).value);
    }

}

}

Я ожидаю выхода 123.

1 Ответ

0 голосов
/ 27 января 2019

Вы, вероятно, не понимаете, как реализовать сам связанный список и использовать собственную коллекцию Java LinkedList.

Java * java.util.LinkedList управляет внутренними указателями next и previous.Это не позволяет вам манипулировать ими или ожидать от вас управления ими.Он реализует двусвязный список, но он абстрагирован от вас.

Вы добавляете 5 узлов к этому LinkedList, и нигде вы не удаляете дубликаты.

Ваш класс Node в этом случае бесполезен.Вы обновляете отдельную связанную цепочку из next указателей, но не просматриваете ее и не используете ее каким-либо образом.

Вы могли просто добавить числа непосредственно в LinkedList и удалить дубликатыпотом:

List<Integer> list = new LinkedList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(1);
list.add(1);

List<Integer> uniqueList = list.stream().distinct().collect(Collectors.toList());

for (int i = 0; i < uniqueList.size(); ++i) {
    System.out.print(list.get(i).value);
}
...