Java 将对象推到堆栈上
我有一个将对象推到堆栈上的代码,如果有人能解释为什么前一个节点(newNode.next)必须等于top,以及为什么要使top等于newNode,我很难理解每一行的作用Java 将对象推到堆栈上,java,stack,Java,Stack,我有一个将对象推到堆栈上的代码,如果有人能解释为什么前一个节点(newNode.next)必须等于top,以及为什么要使top等于newNode,我很难理解每一行的作用 void push(AnyClass newbObj) { Node newNode = Node(newObj); newNode.next = top; top = newNode; } 我添加了一些评论,希望对您有所帮助 void push(AnyClass newbObj) { Node newNode
void push(AnyClass newbObj)
{
Node newNode = Node(newObj);
newNode.next = top;
top = newNode;
}
我添加了一些评论,希望对您有所帮助
void push(AnyClass newbObj)
{
Node newNode = Node(newObj); //create a new node of the stack containing the data (newbObj)
newNode.next = top; //the new node has thw prevois top of the stack the successor
top = newNode; //the new node is now the top of the tsack
}
让我分步骤向你解释:
node newNode=node(newObj)创建的新节点代码>。您希望将其放在堆栈顶部(即推送)
newNode.next=top
top=newNode
newNode.next=top
表示newNode
有一个名为
next
它将存储上一个顶级节点的内存地址
。
因此,如果我们想通过当前顶部节点访问上一个顶部节点
(newNode
)我们可以通过以下方式轻松实现:
Node prevTopNode=(Node)top.next
这看起来像一个链表实现。在链表中,每个项目都有一个指向列表中下一个项目的指针(引用) 变量
top
似乎是对列表开头节点的引用,因此表示堆栈的顶部
让我们假设列表开始如下所示:
item 1 -> item 2 -> etc...
^----top
newNode -> item 1 -> item 2 -> etc...
^----top
第一行只是将参数强制转换为正确的类型,我们可以定义push()
来取而代之的是节点
,并将这一行全部删除
由于我们希望在前面插入新节点,因此首先需要使用以下命令确保它指向列表的其余部分:
newNode.next = top; //Point newNode's 'next' field to the current top of the list
这给了我们类似的东西
newNode -> item 1 -> item 2 -> etc...
^----top
但是top
仍然指向旧项目,因此我们现在更新:
top = newNode; //Re-assign top to point to the new head of the list
现在列表如下所示:
item 1 -> item 2 -> etc...
^----top
newNode -> item 1 -> item 2 -> etc...
^----top
我们完成了。用笔和纸试一下。看看节点的定义,特别是其中的字段
next
。然后读到:@Anony Mousse我在纸和笔上试过它,它实际上不是一个堆栈,而是一个链表。在步骤4中,为什么新节点是newNode.next?这样节点链就保持不变了。这就像:顶部节点容纳第二个节点。第二个节点容纳第三个节点。第三是举办第四届等等。。。它可以可视化为top->2nd->3rd->4rth->…->nth节点