推送函数如何在叠加链接列表中工作?

推送函数如何在叠加链接列表中工作?

问题描述:

这是我的老师的示例代码:推送函数如何在叠加链接列表中工作?

public void push(T item){ 
     node<T> newNode = new node<T>(item); 
     newNode.next = head; 
     head = newNode; 

    } 

这是我的理解: 我创建了一个名为newNode新节点。这将新节点的数据值设置为该项目,将下一个点设置为空(空)。

然后我说,新节点指向该节点旁边被称为头。然后我做出newNode列表的头部。

这是我不明白: 发生前一个节点,这是头什么?它是如何知道在newNode之后去的,而不是消失并退出列表?

例如,如果5是头和6是newNode,然后6将指向5.如后它的节点。但是那么我们说头是5,也是6?那么5会发生什么?

节点的地址,这将是一个有点一个奇怪的答案,但也许这将有助于看看指针是如何被设置:

所以原来的名单是这样的:

linkedList -(head)-> node1 -(next)-> node2 -(next)-> etc. 

,那么你犯了一个新的节点:node<T> newNode = new node<T>(item);

node3 -(next)-> null  
linkedList -(head)-> node1 -(next)-> node2 -(next)-> etc. 

然后您做出新节点指向你的老脸:newNode.next = head;

node3 -(next)-> node1 -(next)-> node2 -(next)-> etc. 
linkedList -(head)-> node1 -(next)-> node2 -(next)-> etc. 

然后你改变你的头指针到新节点:head = newNode;

linkedList -(head)-> node3 -(next)-> node1 -(next)-> node2 -(next)-> etc. 
+0

谢谢你!所以node3不是链表的一部分,直到你说head = newNode? – sukiyo

+0

所以头像下一个指针? :o为什么你不能说“head.next = newNode” – sukiyo

+1

是啊,头也只是一个指针@suikyo。任何不是[原始数据类型](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)的变量都只是一个指针。 – luckydog32

当你第一次创建一个节点到堆栈,你在上面放置最后一个是头部。所以首先你的例子是放置5到堆栈5,其下一个指向空,并且是堆栈的头部。这是你理解的。当你将6放在堆栈上时,它的nextNode.next指向头部当前所在的地址就是这种情况下的节点5。然后头部会再点至6

所以6仍然指向先前的头部这是5

希望这有助于

+0

的感谢!你的意思是什么?“然后头会指向节点6的地址。”你说的是6指向的头是5的地址。 – sukiyo