将对象推入堆栈

时间:2013-01-26 22:07:52

标签: java stack

我有这个代码用于将对象推入堆栈,我无法理解每一行的作用,如果有人可以解释为什么前一个节点(newNode.next)必须等于top,以及为什么然后制作top等于newNode。

void push(AnyClass newbObj)
{
  Node newNode = Node(newObj);
  newNode.next = top;
  top = newNode;
}

3 个答案:

答案 0 :(得分:2)

这看起来像一个链表实现。在链表中,每个项目都有一个指针(引用)到列表中的下一个。

变量top似乎是对列表开头节点的引用,因此代表堆栈的顶部。

我们假设列表开始如下所示:

item 1 -> item 2 -> etc...
^----top

第一行只是将参数转换为正确的类型,我们可以改为定义push()代替Node并完全删除此行。

由于我们想在前面插入新节点,首先我们需要确保它指向列表的其余部分:

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

现在列表如下:

newNode -> item 1 -> item 2 -> etc...
^----top

我们已经完成了。

答案 1 :(得分:1)

让我分一步解释你:

  
      
  1. newNode是使用代码Node newNode = Node(newObj);创建的新节点。并且您希望将其置于堆栈顶部(即推送)
  2.   
  3. 现在在堆栈顶部,您有另一个名为top的节点。
  4.   
  5. 您想将当前的顶级节点推向一级
  6.   
  7. 您可以通过以下代码将新节点链接到当前的顶级节点。

         

    newNode.next = top

  8.   
  9. 然后在以下代码中将新节点作为堆栈顶部:

         

    top = newNode

  10.   

修改

  

有些人强调第4行。

     

newNode.next = top表示newNode有一个名为的变量   next

     

将存储前一个Top节点的memory address。   因此,如果我们想要通过当前Top节点访问前一个顶级节点   (newNode)我们可以通过以下方式轻松完成:

     

Node prevTopNode = (Node)top.next

答案 2 :(得分:0)

我添加了一些评论,希望有所帮助。

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
}