Java 为什么我的代码没有删除重复的节点?我的输出仍然是12311

Java 为什么我的代码没有删除重复的节点?我的输出仍然是12311,java,linked-list,void,Java,Linked List,Void,我试图删除未排序链表中的重复节点。然而,我的输出并没有改变链表 我试图替换此代码: 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)); 与 但还是没有运气 import java.util.HashSet; import java.util.LinkedList;

我试图删除未排序链表中的重复节点。然而,我的输出并没有改变链表

我试图替换此代码:

            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));

但还是没有运气

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);
    }

}

}
import java.util.HashSet;
导入java.util.LinkedList;
类节点{
公共价值观;
公共节点下一步;
公共节点(int值){
这个值=值;
}  
}
类链接列表{
节点头;
公共静态void removeDups(节点n){
HashSet=newhashset();
Node prev=null;
如果(n==null){
回来
}
while(n!=null){
if(设置包含(n值)){
上一个=下一个;
}否则{
设置。添加(n.值);
prev=n;
}
n=n.next;
}           
}
公共静态void main(字符串[]args){
LinkedList=新建LinkedList();
列表。添加(新节点(1));
添加(新节点(2));
添加(新节点(3));
列表。添加(新节点(1));
列表。添加(新节点(1));
removeDups(list.getFirst());
对于(int i=0;i

我预计产量为123

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

Java在内部管理
next
previous
指针。它不允许您操纵它们,也不希望您管理它们。它实现了一个双链接列表,但它是从您那里抽象出来的

您正在将5个节点添加到此
链接列表中
,并且没有重复的节点

在这种情况下,您的
节点
类是无用的。您正在更新一个单独的
next
指针链接链,但您没有遍历它或以任何方式使用它

您可以简单地将数字直接添加到
链接列表
,然后删除重复的数字:

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);
}
List List=newlinkedlist();
增加第(1)款;
增加(2);
增加(3);
增加第(1)款;
增加第(1)款;
List uniqueList=List.stream().distinct().collect(Collectors.toList());
对于(int i=0;i
这不是实现LinkedList的方式。如果是家庭作业,那么我肯定会要求您自己实现linkedlist,而不是使用Java的lib。
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);
}