Java—具有Sentinel的双链接列表的迭代器应该是这样的吗?

Java—具有Sentinel的双链接列表的迭代器应该是这样的吗?,java,data-structures,linked-list,iterator,Java,Data Structures,Linked List,Iterator,作为练习,我正在编写自己的双链接列表实现,但我认为我不完全了解如何利用列表开头和结尾的哨兵节点。我想特别询问一下在迭代器中使用Sentinel的情况。这是我的迭代器(未完成): 私有类MyIterator实现迭代器{ 私有节点电流=第一; 公共布尔hasNext(){ if(current.next.next==null)返回false; 否则返回true; } 公共交通工具{ 当前=当前。下一步; 如果(current.next==null)抛出新的NoTouchElementExceptio

作为练习,我正在编写自己的双链接列表实现,但我认为我不完全了解如何利用列表开头和结尾的哨兵节点。我想特别询问一下在迭代器中使用Sentinel的情况。这是我的迭代器(未完成):

私有类MyIterator实现迭代器{
私有节点电流=第一;
公共布尔hasNext(){
if(current.next.next==null)返回false;
否则返回true;
}
公共交通工具{
当前=当前。下一步;
如果(current.next==null)抛出新的NoTouchElementException();
返回当前数据;
}
}

我想知道的是,是否有任何方法可以在next()和hasNext()方法中使用tail sentinel来避免空检查。或者这样可以吗?

否此代码将失败:如果
current.next
null
您将获得NPE。
hasNext()
不应该告诉您当前对象是否有下一项吗?如果当前项目下一个项目有下一个项目,则不会。这将是
nextHasNext()
hasNext()中的某个内容
return current.next!=无效private class MyIterator implements Iterator<T> {
    private Node current = first;

    public boolean hasNext() {
        if(current.next.next == null) return false;
        else return true;
    }

    public T next() {
        current = current.next;
        if(current.next == null) throw new NoSuchElementException();
        return current.data;
    }
}