gpt4 book ai didi

java - 如何在两个虚拟节点之间的双向链表的开头添加一个节点?

转载 作者:行者123 更新时间:2023-12-01 10:59:52 24 4
gpt4 key购买 nike

我正在尝试编写一个函数addFirst(),它接受一个项目并将其插入到双向链表的前面。双向链表有两个虚拟节点,两端各一个。当我迭代列表并打印它时,到目前为止我编写的 addFirst() 方法仅返回两个虚拟节点。我无法弄清楚我的代码出了什么问题。

public void addFirst(E item) {
if (item.equals(null)) { throw new NullPointerException(); }

Node node = new Node(item, null);
Node ptr = first;

ptr.next.prev = node;
node.prev = ptr;
node.next = ptr.next;

}

public static void main(String[] args) {

Deque<Integer> lst = new Deque<Integer>(); // empty list

lst.addFirst(1);
lst.addFirst(2);
lst.addFirst(3);

Iterator<Integer> it = lst.iterator(); // tests iterator method
while (it.hasNext()) {
Integer val = it.next();
System.out.println(val);
}
}

当我运行 main 时,我得到的是:

空空

但是,我期望:

空 3 2 1 空

任何人都可以告诉我如何修复我的代码,以便我可以在两个虚拟第一个和最后一个节点之间的双向链表的开头添加一个项目吗?

最佳答案

我发现我做错了什么。我只需要通过添加行来完成链

ptr.next = 节点;

所以我的此方法的完整代码如下所示:

public void addFirst(E item) {
if (item.equals(null)) { throw new NullPointerException(); }

Node node = new Node(item, null);
Node ptr = first;

ptr.next.prev = node;
node.prev = ptr;
node.next = ptr.next;
ptr.next = node;

}

关于java - 如何在两个虚拟节点之间的双向链表的开头添加一个节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33427288/

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