gpt4 book ai didi

java - java中删除链表中的重复项

转载 作者:行者123 更新时间:2023-12-02 00:56:12 25 4
gpt4 key购买 nike

我尝试使用以下代码删除简单列表中的重复项:

public void eliminarRepetidos(){
if(this.isEmpty())
return;

for(Nodo<T> n = this.cab; n!=null; n=n.getSiguiente()){
for(Nodo<T> m = n.getSiguiente(); m!=null; m=m.getSiguiente()){
if(n.getInfo() == m.getInfo()){
eliminar(m);
}
}
}
}


private void eliminar(Nodo<T> m){
Nodo<T> aux =this.cab;
while(aux.getSiguiente()!= m){
aux = aux.getSiguiente();
}
aux.setSiguiente(m.getSiguiente());
m.setSiguiente(null);
this.tam--;
}

如果列表为空,则不会执行任何操作。if (isEmpty ())如果列表有元素,那么我将继续删除,以头节点为引用,在本例中,头节点是第一个 for 中的节点 n。节点 m 始终位于节点 n 之前(第二个),m 将迭代寻找匹配项,如果找到匹配项,则消除该节点 (m),即消除 (m) ;。

当进入删除方法(节点m)时,我所做的是创建一个辅助节点(Aux节点),这将迭代直到它是通过参数传递的节点m的前一个节点,这是为了不失去连续性列表中的。

测试时,我输入整数数据列表:1-> 1-> 1-> 1-> 1-> 1-> 1-> 1-> 1-> 1-> null

你应该给我一个答案 1-> null。

但它并没有将它们全部删除,输出如下:1-> 1-> 1-> 1-> 1-> null

我已经尝试了一段时间了,但无法将它们全部消除,我失败了什么?或者我必须纠正什么才能使代码正常工作?

最佳答案

因为你在做

eliminar(m);

迭代结束时的 for 正在执行

m.getSiguiente();

它将返回null,因为在eliminar中,您已将siguente设置为null...相反,您应该在第二个循环中执行此操作:

Nodo<T> tmp = m.getSiguiente();
eliminar(m);
m = tmp;

关于java - java中删除链表中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61376605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com