检测链表的结尾

时间:2014-04-25 12:58:49

标签: java linked-list listiterator

我正在制作电话簿中的条目链接列表。但是,我正在努力找出一个完整的删除方法。我尝试检测到我尝试删除的条目不在列表中,并且未找到“未找到条目”的条目。信息。我使用列表界面进行链接列表。这是目前为止的删除方法。现在我试图覆盖最后一个节点"最后一个if语句中的情况。但它不起作用。如果我没有使用列表界面,我想我可以使用getLast()方法并将其与我当前所在的条目进行比较,但我更喜欢这样做,并找出另一种方法解决这个问题。有任何想法吗 ? - 编辑它不工作的原因是如果我删除列表中的最后一个条目,即使该条目作为最后一个节点并且已成功删除,它也会打印出条目未找到消息

 public void deleteEntry(String number) {
    ListIterator<Entry> i = phoneBook.listIterator();

    while(i.hasNext()){
        Entry e = i.next();
        if(e.getNumber().equals(number)){
            i.remove();
            break;
        }
    }
    if(phoneBook.size() != 0 && (!(i.hasNext()))){
        System.out.println("Entry not found");
    }
}

4 个答案:

答案 0 :(得分:2)

break;语句替换为return;

答案 1 :(得分:2)

你可以这样做:

public void deleteEntry(String number) {
    int size = phoneBook.size();
    for (ListIterator<Entry> i = phoneBook.listIterator(); i.hasNext(); ) {
        Entry e = i.next();
        if (e.getNumber().equals(number)) {
            i.remove();
            break;
        }
    }
    if (phoneBook.size() == size) {
        System.out.println("Entry not found");
    }
}

答案 2 :(得分:1)

public void deleteEntry(String number) {
    ListIterator<Entry> i = phoneBook.listIterator();
    while(i.hasNext()){
        Entry e = i.next();
        if(e.getNumber().equals(number)){
            i.remove();
            return;
        }
    }
    System.out.println("Entry not found");
}

但最好将返回类型更改为boolean并在找到数字后立即返回true,否则false最后

答案 3 :(得分:0)

public void deleteEntry(String number) {
    ListIterator<Entry> i = phoneBook.listIterator();
    boolean found = false;
    while(i.hasNext()){


        Entry e = i.next();
        if(e.getNumber().equals(number)){
            if(!found)
        found = true;

            i.remove();
            break;
        }
    }
    if(!found){
        System.out.println("Entry not found");
    }
}