如何在 Java 循环链表中设置下一个值?
Posted
技术标签:
【中文标题】如何在 Java 循环链表中设置下一个值?【英文标题】:How to set next value in a Circularly Linked List in Java? 【发布时间】:2015-10-03 09:18:38 【问题描述】:这是我目前所拥有的:
public void insert(int position, ValueNode value)
if (position == 1)
this.nextInRow = value;
ValueNode current = this.getFirst();
if (position > 1)
current.setNext(current.next);
value.setNextInRow(current.getNext());
使用第一个 if 语句正确设置了头节点。在这个列表中,我们已经知道位置,所以我认为我们不需要 while 循环,因为我们知道将新节点放在哪里。
我创建了一个名为 current 的临时节点来保存下一个节点指针,但现在它将指针设置为 null。我的问题是我不知道下一个节点指针指向哪里。任何帮助将不胜感激。
【问题讨论】:
除非你有一个包含节点的数组,否则你需要那个 while 循环来找到正确的位置。但是这段代码不足以帮助你——我们不知道getFirst
做了什么,列表是单链接还是双链接。您需要添加ValueNode
和至少setNext()
以及此代码或它所依赖的任何代码中引用的任何方法和变量。
getFirst 只返回列表中的第一个节点......它是一个 SLL .. 但最后一个节点应该指向第一个节点以使其循环......
【参考方案1】:
区分使用值创建节点和设置下一个节点操作。
你的数据结构可以是这样的:
class Node
int val;
Node next;
Node previous;
//setters and getters and constructors
1) 对于所有新值都应该有一个节点
Node createNode(int val)
Node newNode = new Node(val);
newNode.next = null;
newNode.previous = null;
return newNode;
2) 从root开始定位newNode或保持当前节点设置为next
currentNode.setNext(Node newNode);
//iterate the currenNode with newNode
currentNode = newNode;
...
// implement the setNext and mark current as previous for newNode
void setNextNode(Node newNode)
this.next = newNode;
newNode.setPrevious(this);
【讨论】:
值得注意的是,插入方法占据了一个位置,所以我们知道将新节点放在哪里......我认为我的问题是我不知道如何存储下一个值......例如,如果我插入 node2 但我必须让 node2 指向 node3 .. 我怎么知道 node3 在哪里 .. 这就是为什么首先创建 val 的节点并将此节点设置为前一个节点的下一个节点。这会将它们连接在一起。以上是关于如何在 Java 循环链表中设置下一个值?的主要内容,如果未能解决你的问题,请参考以下文章