2017-06-23 74 views
0

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

但是,这是如何使节点打印到不一样的下一个节点。 我是否有隐藏我的代码的小姐? 我能做些什么来完成这项任务?

回答

0

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

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

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

一些更多的言论:

  • 初始化p的福尔循环之外似乎superflous,因为它是在初始化循环
  • 的福尔外温度的初始化循环似乎是superflous以及它在for循环中初始化
  • 混淆while和代码while while循环不容易阅读。如果可能,应该坚持使用一个
  • getLetter方法的返回类型是什么?当它不是简单的类型时,应该使用equals而不是==来检查值是否相同。否则,你检查它是否是相同的实例
相关问题