Java 将对象推到堆栈上

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

我有一个将对象推到堆栈上的代码,如果有人能解释为什么前一个节点(newNode.next)必须等于top,以及为什么要使top等于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
}

让我分步骤向你解释:

  • newNode是使用code
    node newNode=node(newObj)创建的新节点。您希望将其放在堆栈顶部(即推送)
  • 现在在堆栈的顶部有另一个名为top的节点
  • 要将当前顶部节点向下推一步
  • 在以下代码中将新节点链接到当前顶部节点

    newNode.next=top

  • 然后,在以下代码中将新节点作为堆栈的顶部:

    top=newNode

  • 编辑

    有些人强调第4行

    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节点