gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:16:53 25 4
gpt4 key购买 nike



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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com