在排序列表中删除相同

时间:2017-06-23 12:00:32

标签: java list

我在java中编写一个方法来删除列表中的同一个char(只保留一个)。

这是方法:

    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);
    }
}

但这是如何使节点打印到下一个不相同的节点。 我是否因为我的代码而感到不自在? 我该怎么做才能完成这项任务?

2 个答案:

答案 0 :(得分:1)

也许你应该用伪代码或人类可读的语言写下你想要达到的目标以及如何做到这一点。类似的东西:

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方法的返回类型是什么?如果它不是简单类型,则应使用equals而不是==来检查值是否相同。否则,检查它是否是同一个实例

答案 1 :(得分:0)

发生了无限循环,因为当代码到达的节点之后没有相同的字母,然后是节点之后,他无法将节点设置为指向他自己。

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

Toolbar