Java 删除链接列表中连续的相同项目
因此,我必须编写一个函数来删除具有连续相同项的节点。Like:{1,1,1,2,3,3,4}变成:{1,2,3,4} 我已经写了下面的代码,无法找出它有什么问题。它只适用于前几个项目Java 删除链接列表中连续的相同项目,java,Java,因此,我必须编写一个函数来删除具有连续相同项的节点。Like:{1,1,1,2,3,3,4}变成:{1,2,3,4} 我已经写了下面的代码,无法找出它有什么问题。它只适用于前几个项目 public void deleterepetitive() { Node itr = head; Node itrfront=itr.getNext(); while(itr.getNext()!=null) {
public void deleterepetitive()
{
Node itr = head;
Node itrfront=itr.getNext();
while(itr.getNext()!=null)
{
if(itr.getItem()==itrfront.getItem())
{
itr.setNext(itrfront.getNext());
}
itr = itr.getNext();
itrfront = itrfront.getNext();
}
任何帮助都将不胜感激。有很多方法可以做到这一点 我发现要么从底部单步遍历列表(从第N项开始,迭代回第0项),要么获取集合并将其插入到集合中,以强制折叠相同的值也可以
干杯更改行
itrfront=itrfront.getNext()
toitrfront=itr.getNext()代码>在while循环中。我猜你的代码在第一次重复遗漏后就会中断
按如下方式更改if块:(我们需要检查新的下一项,而不是跳过它。)
早些时候你的代码是
第一次迭代:
1 1 1 1 1 2 3 3 4
^ ^
ITR NExt
1 1 1 1 2 3 3 4
^ ^
ITR NExt
重复,所以删除节点
第二次迭代:
1 1 1 1 1 2 3 3 4
^ ^
ITR NExt
1 1 1 1 2 3 3 4
^ ^
ITR NExt
您没有正确增加迭代器,您希望itrfront始终位于itr前面,但实际上它位于itr之上:
让itrbe:^,itrfrontbe:A和itr.getNext()be:n,这就是发生的情况:
n
1 1 1 2 2 2 2 3
^ A
n
1 1 1 2 2 2 2 3
^ A
n
1 *1* 1 2 2 2 2 3
^
A
n
1 *1* 1 2 2 2 2 3
^
A
n
1 *1* 1 2 2 2 2 3
^
A
其中*1*表示已收集的垃圾
您要做的是这样的:
while(itr.getNext()!=null)
{
while(itr.getItem()==itrFront.getItem())
{
itrfront = itrfront.getNext();
}
itr.setNext(itrfront);
itr = itr.getNext();
itrfront = itr.getNext();
}
你能看看我的代码片段吗?我不知道我的逻辑出了什么问题