java - 如何创建链表的迭代器?

标签 java data-structures linked-list iterator



public class Java_Practice {

private static class LinkedListTest {

    private String data;
    private LinkedListTest next;

    public LinkedListTest(String data) {
        super();
        this.data = data;
    }

    public String getData() {
        return data;
    }

    public LinkedListTest getNext() {
        return next;
    }

    public void setNext(LinkedListTest next) {
        this.next = next;
    }

    @Override
    public String toString() {
        return "LinkedListTest [data=" + data + ", next=" + next + "]";
    }

}

// Do a deep copy
private static LinkedListTest copyLlt(LinkedListTest original) {

    LinkedListTest copy = new LinkedListTest(original.getData() + " copied");

    LinkedListTest nextCopy = original.getNext();
    LinkedListTest current = copy;

    while (nextCopy != null) {

        LinkedListTest newCopy = new LinkedListTest(nextCopy.getData() + " copied");
        newCopy.setNext(nextCopy.getNext());

        current.setNext(newCopy);

        current = newCopy;
        nextCopy = newCopy.getNext();
    }

    return copy;
}

我有一个类似这样的链表代码。我想创建一个具有 3 个私有(private)成员的迭代器:cur(当前节点)、itnext(下一个节点)和 list(我们正在迭代的整个列表)。我想知道如何获得列表值。有什么方法可以找出当前节点的前一个节点吗?抱歉,如果这是一个菜鸟问题。提前致谢

最佳答案

迭代器不需要下一个节点私有(private)成员,因为它可以从当前节点获取下一个节点。这个问题没有提到你想用迭代器实现什么方法。

figure out the previous node of the current node?

对于单个链表,没有简单的方法可以向后遍历列表。如果方法不涉及向后遍历列表,则迭代器可以是指向前一个节点的指针(引用),这将需要使用虚拟节点作为列表的头节点,以便每个数据节点都有一个前一个节点节点。

使用指向前一个节点的迭代器,可以实现插入和删除方法(以及获取和设置数据)。

<小时/>

使用双链表,可以实现拼接方法(将列表中的节点移动或从一个列表移动到另一个列表),以及向后遍历列表。

请注意,我认为 Java 的链表迭代器 native 实现是一个糟糕的实现,因为它派生自面向数组的类,这与 C++ 模板库不同,后者将链表实现为独立的双向链表容器。使用 C++ std::list 没有索引,但 std::next 可以扫描列表来模拟索引,尽管速度很慢。由于 Java 在其内部链表迭代器中保留索引,因此任何节点的插入或删除都会使该列表的所有其他迭代器无效,这就是我认为它是一个如此糟糕的实现的原因之一。我认为 Java 列表迭代器较差的另一个原因是 Java 迭代器无法复制(相反,您只是获得对同一迭代器对象的重复引用)。

关于java - 如何创建链表的迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61368480/

相关文章:

c++ - 链表插入、删除、排序

java - 最大元素。算法

java - 将从输入流接收到的对象传递给另一个类

java - 从 jar 文件更改类的代码

java - Android,创建引用类数组

java - java中的链表反向函数

c++ - 如何使用 std::binary_search 或 std::sort 对结构数组进行排序

c++ - 首选哪种数据结构而不是操作多个 vector

arrays - 链表如何比插入和删除操作的数组更快,尽管它对两种数据结构都需要 O(n)?

java - 从服务器运行 Notes Java 代理时没有受信任的证书