/ /ダブルリンクリストのイテレータ、next()、remove()の実装方法-Java、イテレータ、リンクリスト

二重リンクリストのイテレータ、next()、remove()の実装方法-Java、イテレータ、リンクリスト

next()およびremove()i "mで問題が発生しています。 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--;



}

}

回答:

回答№1は0
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;
}