首页 > 解决方案 > 为什么我的代码没有删除重复的节点?我的输出仍然是 12311

问题描述

我正在尝试删除未排序链表中的重复节点。但是,我的输出根本没有改变链表。

我试图替换这段代码:

            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。

标签: javalinked-listvoid

解决方案


您可能对自己实现 Linked List 和使用 Java 自己的LinkedList集合感到困惑。

Javajava.util.LinkedList在内部管理nextprevious指针。它不允许您操纵它们,或期望您管理它们。它实现了一个双向链表,但它是从你那里抽象出来的。

您正在向此添加 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);
}

推荐阅读