LinkedList删除条件(最后一个迭代项)

时间:2013-11-05 06:31:30

标签: java

我试图使用自定义迭代器/链接列表类删除最后一个迭代元素。它出于某种原因只对列表中的第一项(头部条件)执行此操作。这些条件有什么问题吗?

我应该在If(prev = head)之后,而不是Else,写If(next!= null)来查找中间节点,而If(next = null)找到最后一个节点? 第二个问题:删除这些项目,我是否也应该写prev.element = null(现在我只有prev = null,我想这会删除节点而不是它的内容。

很简单,我的删除方法有什么问题,因为我自己无法弄明白。非常感谢你们。我一直在用这个工作很多个小时但是我还没有工作。

public E next() {
    if (!hasNext())
        throw new NoSuchElementException ();
    prev = next;
    E element = next.element;
    next = next.next;
    return element;
}

public void remove() { 
    if(prev == null) {
        throw new IllegalStateException();
    }
    else {
        if(prev == head){
            head = head.next;
            next = head;
        }
        else {
            next = prev.next;
        }
        sizeOfList--;
        prev = null;
    }
}

2 个答案:

答案 0 :(得分:0)

这是我对给定代码的最佳猜测

if(prev == head){ 应更改为 if(prev.equals(head)){使用等于方法。

我认为你必须在相应的元素类中重写equals方法可能肯定有帮助。

==仅检查两个变量是否引用内存中的同一对象,其中equals检查对象状态

我希望它有所帮助:)。

答案 1 :(得分:0)

您需要一个while循环才能遍历列表中的每个节点,直到您点击最后一个节点。就像现在一样,你的代码只是越过头部,然后进入代码为sizeOfList--然后prev = null;

你需要这样的东西:

while (prev.next.next != null) {
    prev = prev.next;
}

prev.next = null;

我执行prev.next.next,以便您可以将链表中的倒数第二个节点设置为空值(由prev.next = null;完成)。可以这样想:prev是列表中倒数第二个元素,prev.next是最后一个元素,显然prev.next.next是null(因为prev.next是最后的。)所以一旦这是case,通过将2nd到last元素设置为空值来删除最后一个元素。

然后递减列表计数。