Java 删除链接列表中连续的相同项目

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

因此,我必须编写一个函数来删除具有连续相同项的节点。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)
        {

            if(itr.getItem()==itrfront.getItem())
            {
                itr.setNext(itrfront.getNext());
            }
            itr = itr.getNext();
            itrfront = itrfront.getNext();

        }

任何帮助都将不胜感激。

有很多方法可以做到这一点

我发现要么从底部单步遍历列表(从第N项开始,迭代回第0项),要么获取集合并将其插入到集合中,以强制折叠相同的值也可以


干杯

更改行
itrfront=itrfront.getNext()
to
itrfront=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();
}

你能看看我的代码片段吗?我不知道我的逻辑出了什么问题