推送函数如何在叠加链接列表中工作?
这是我的老师的示例代码:推送函数如何在叠加链接列表中工作?
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.
当你第一次创建一个节点到堆栈,你在上面放置最后一个是头部。所以首先你的例子是放置5到堆栈5,其下一个指向空,并且是堆栈的头部。这是你理解的。当你将6放在堆栈上时,它的nextNode.next指向头部当前所在的地址就是这种情况下的节点5。然后头部会再点至6
所以6仍然指向先前的头部这是5
希望这有助于
的感谢!你的意思是什么?“然后头会指向节点6的地址。”你说的是6指向的头是5的地址。 – sukiyo
谢谢你!所以node3不是链表的一部分,直到你说head = newNode? – sukiyo
所以头像下一个指针? :o为什么你不能说“head.next = newNode” – sukiyo
是啊,头也只是一个指针@suikyo。任何不是[原始数据类型](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)的变量都只是一个指针。 – luckydog32