Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除排序列表中的相同内容_Java_List - Fatal编程技术网

Java 删除排序列表中的相同内容

Java 删除排序列表中的相同内容,java,list,Java,List,我正在用java编写一个方法来删除列表中的同一个字符(只保留同一个字符中的一个) 方法如下: public void deleteSameInSortedList(){ CharNode p=head.getNext(); CharNode temp=p; for(p = head; p != null; p = p.getNext()){ temp=p; while(p.getNext()!=null&& p.ge

我正在用java编写一个方法来删除列表中的同一个字符(只保留同一个字符中的一个)

方法如下:

    public void deleteSameInSortedList(){
    CharNode p=head.getNext();
    CharNode temp=p;
    for(p = head; p != null; p = p.getNext()){
        temp=p;
        while(p.getNext()!=null&& p.getLetter()==p.getNext().getLetter()){          
            System.out.println(p.getLetter());
            p=p.getNext();
        }
////我认为这导致了一个无限循环

        temp.setNext(p);
    }
}
但这是如何使节点打印到下一个不同的节点。 我对我的代码有没有误解?
我能做些什么来完成这个任务呢?

无限循环发生的原因是,当代码到达一个与后面的节点没有相同字母的节点时,他无法将节点设置为指向自己

这就是为什么我创建了一个标记(布尔值),它将跟踪我们何时需要设置节点

public void deleteSameInSortedList(){
    CharNode p=head.getNext();
    CharNode temp=p;
    boolean flag=false;
    for(p = head; p != null; p = p.getNext()){
        flag=false;
        temp=p;
        while(p.getNext()!=null&& p.getLetter()==p.getNext().getLetter()){      
            flag=true;
            p = p.getNext(); 
        }
        if(flag){
            temp.setNext(p.getNext());
        }
    }
}

也许你应该用伪代码或人类可读的语言写下你想要实现什么以及如何实现。比如:

Iterate over each element
  If the element's value is the same as the next element's value
    If there is an element after the next one
      Set the next element pointer of the current element to the element after the next one
    Else
      Set the next element pointer to null
还有一些评论:

  • 在foor循环之外初始化p似乎是超级的,因为它是在for循环中初始化的
  • foor循环外部的temp初始化似乎是超级的,它也是在for循环中初始化的
  • 将for和while循环混合在一组代码中并不容易阅读。如果可能的话,你应该坚持一个
  • getLetter方法的返回类型是什么?当它不是一个简单类型时,应该使用等于而不是==来检查值是否相同。否则,您将检查它是否是同一实例