java - 双链表的迭代器,如何实现next(), remove()?

标签 java iterator linked-list

next() 和 remove() 我遇到了麻烦。 对于 next() 我想返回列表中的下一个元素。 对于 remove() 从基础集合中移除迭代器返回的最后一个元素(可选操作)。

我知道我应该做什么,但我在编写代码时遇到了问题。有人可以给我一些提示吗?或者向我解释我应该做什么。

这是我的代码,一团糟。

    class DoublyLinkedList12Iterator implements Iterator
    {
    private Node cursor;
    private Node lastNodeReturned;
    private Node cursorNext = cursor._next;
    private int nextIndex = 0;
    // private int prevIndex = -1;
    private boolean _hasNextBeenCalled = false;
    private int _currentIndex = -1;


    //Returns true if the iteration has more elements
        public boolean hasNext() {
            return _currentIndex < (_size -1);
        }


    //returns the next element in the iteration
        public Object next() 
        {


        _currentIndex++;
        _hasNextBeenCalled = true;

        /*if(nextIndex == 0)
        {
           nextIndex++;
           return _head._next;
        }*/


        if(cursor != null)
        {
           cursor = cursor._next;
        }
        else
        {
           throw new NoSuchElementException();
        }


        //cursor = cursor._next;
        lastNodeReturned = cursor;
        return cursor._data;




        /*prevIndex--;
        nextIndex++;
        return cursor;

        this._prev = this._next;
        if(this._next != null);
        return the first node  

                Node cursor = _head;
                    for(int i = _currentIndex; i < _size ; i++)
                    {
                    cursor = cursor._next;
                    }
                    return cursor._data;
        */
            }


        public void remove() 
        {


        if(!_hasNextBeenCalled)
        {
           throw new IllegalStateException();
        }

        _hasNextBeenCalled = false;

        if(cursor == lastNodeReturned)
        {
           cursor = cursor._next;
        }
        else
        {
           nextIndex--;
        }

        lastNodeReturned._prev = lastNodeReturned._next;

        _size--;



            }

    }

最佳答案

public T next() {
if (nextnode == null)
    throw new NoSuchElementException();
currentnode = nextnode;
previousnode = currentnode.previous;
nextnode = currentnode.next;
return currentnode.element;
}

public void remove() {
if (previousnode != null)
    previousnode.next = nextnode;
if (nextnode != null)
    nextnode.previous = previousnode;
}

关于java - 双链表的迭代器,如何实现next(), remove()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7202908/

相关文章:

c - 读入链表的时间是读入哈希表的时间的两倍

java - 将节点添加到链表的末尾

java - 从 Java 中特定键的映射中获取长值列表

java - 对实现不相关接口(interface) Java 的对象进行强制转换

java - 如何迭代数组列表并打印包含单词的索引?

java - 从列表中删除对象和迭代器问题

rust - 我可以使用在函数内部创建的值来扩展迭代器吗?

java - 在带有Java Selenium 的自动化框架中使用的OOP概念的一些实时示例是什么?

scala - 在 Scala 中连接 TraversableOnce 对象?

Java,如何将对象添加到LinkedList?