java - 为什么我的代码没有删除重复的节点?我的输出仍然是 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。
解决方案
您可能对自己实现 Linked List 和使用 Java 自己的LinkedList
集合感到困惑。
Javajava.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);
}
推荐阅读
- flutter - 想在 Flutter 的同一行添加多个项目
- flutter - 我收到这个错误。这是什么问题?
- authentication - API 服务器访问第三方移动应用程序以及用户标识
- php - 合并多维数组(自定义)PHP - Laravel
- javascript - React - 在地图功能中表达预期
- javascript - 当mousedown直到mouseup时如何做工作?
- graphene-python - 如何以字符串的形式获取模型模式(type_defs)?
- wordpress - bot 框架中网络聊天频道上的通知
- visual-studio-code - 如何防止 VS Code 记住工作文件夹之外的文件?
- java - 如何在 Android 的 PayUMoney 支付网关中设置多种支付选项