java - 末端的双重 LL 插入卡在循环上
问题描述
我似乎无法弄清楚为什么在双向链表末尾插入一个节点会陷入循环。它要么陷入循环,要么陷入空指针。另外我想知道在处理链表或任何数据结构时公共节点是否更好或公共无效。
public Node insertEnd(int data) {
Node newNode = new Node(data);
newNode.next = null;
if (head == null) {
head = newNode;
return newNode;
}
Node last = head;
while(last!=null) {
last = last.next;
last.next = newNode;
}
newNode.previous = last;
return newNode;
}
解决方案
嗯,就是因为这部分逻辑
Node last = head;
while(last!=null) {
last = last.next;
last.next = newNode; //// This shouldn't happen.
}
一旦已经创建了链接列表,您将尝试转到最后一个元素。但是,在遍历期间,您还更改了节点指向的下一个指针。
尝试将您的逻辑更改为:
public Node insertEnd(int data) {
Node newNode = new Node(data);
newNode.next = null;
if (head == null) {
head = newNode;
return newNode;
}
Node last = head;
while(last.next != null) {
last = last.next;
}
last.next = newNode;
newNode.previous = last;
return newNode;
}
推荐阅读
- javascript - 使用 Python 抓取网页时,如何在浏览器错误中禁用 Javascript
- python - 从预制列表生成 Pandas DataFrame?(“通过了 5 列,通过的数据有 500 列”)
- css - React Native 中的中心滚动视图
- node.js - 我试图在 Nodejs 中实现用户身份验证
- django - django 用户 update_fields 未显示在信号中
- python - 基于来自不同模型的另一个模型字段填充模型字段
- javascript - 如何解决这个递归问题(Javascript)
- node.js - Elasticbeanstalk process.env 变量未设置
- java - 当单独的“final”已经阻止变量被修改时,为什么还要使用“private + final”?
- prisma - 导出服务器端 Prisma 模型以供客户端使用