双链接列表中的删除方法内部的循环未知?

时间:2017-04-21 23:45:44

标签: java linked-list

我最近制作了一个带有双链表的java代码。但是,似乎这个remove方法有一段时间用于循环,我无法弄清楚。

如果有人可以帮助我验证这一点,那就太好了。我已经得出结论,这个特定的方法有for循环。

public void remove(Node value){
    Node temp = head;
    while(temp != null){
        if(value.food.equals(temp.food)){
            addtofront(temp);
            if(temp.next == null){
                temp.back.next = null;
                temp.back = null;
            }
            else{
                temp.back.next = temp.next;
                temp.next.back = temp.back; 
        }
        }
        temp= temp.next;
        System.out.println("Print");
    }
}

1 个答案:

答案 0 :(得分:0)

如果temp(列表中的下一个对象)为null,则while循环仅终止,这意味着它将遍历整个对象列表直到结束,即使您已找到要删除的项目。这可以通过在while循环中添加一个额外的条件(如布尔值)来修复,以确保在列表中找到要删除的对象时它会提前终止。

boolean removed = false;
while(temp != null && !removed) {
//search list for item to remove
//when the item has been removed, set removed = true;
}

通过一个案例逐步跟踪循环,以确切了解正在发生的事情以及问题所在,这始终是个好主意。