从链表中选择某些字符串

时间:2011-10-14 18:48:41

标签: java linked-list nodes

我有一个使用节点的linkedList。我按字母顺序打印出来,但现在我正在尝试打印名字以用户要求的某个字母开头的人。例如:打印名称以“A”开头的所有人。我相信这不是我迄今为止做到这一点的最佳方式,但我只是尝试不同的东西而且我对链表很新。任何提示或建议或提示都非常感谢。

继承我认为我可能有用的东西:

       public void findSameStartingLetter(BigNode front, String letter) {
       BigNode curr;
       curr = front; 
       String name;
       name = curr.dataitems;
       String d;
    //   char c; 
          while (curr.next != null){

              d = name.substring(0, 1);
            if (d.equals(letter)) {
                System.out.println(d);
              curr = curr.next;

         // for(int i=0; i < 1; i++) { 
              //  c = letter.charAt(i);
        //  }
              } 

          }
   }

2 个答案:

答案 0 :(得分:2)

看起来您需要在循环内读取节点上人员的姓名,而不是读取名字,然后再不再分配该变量。

您还应检查当前节点是否为空,而不是下一个节点。如果您检查下一个,您将错过列表中的姓氏。

另外,确保列表上的指针移动在if之外完成,因为我们要检查下一个节点,无论名称是什么。

除了逻辑之外,看起来你对java有点不舒服。要清理您的示例,您可以使用java功能来对一行进行delare和赋值。

此外,Java的字符串有一个startWith方法,而不是做一个子字符串并比较子字符串。干得好!

public void findSameStartingLetter( BigNode front, String letter )
    {
        BigNode curr = front;
        while( curr != null )
        {
            String name = curr.dataitems;
            if( name.startsWith( letter ) )
            {
                System.out.println( name );
            }
            curr = curr.next;
        }
    }

答案 1 :(得分:0)

对我来说很好,我唯一要改变的是使用equalsIgnoreCase()而不只是equals()。哦,将curr = curr.next;行留在if

之外