Java Can';t可视化在链表末尾插入节点
我目前正试图理解和可视化Java中的链表 我了解链表的基本概念以及如何将节点添加到列表的开头。但是,我不理解如何将新节点添加到链表的末尾 例如,在以下代码中:Java Can';t可视化在链表末尾插入节点,java,linked-list,Java,Linked List,我目前正试图理解和可视化Java中的链表 我了解链表的基本概念以及如何将节点添加到列表的开头。但是,我不理解如何将新节点添加到链表的末尾 例如,在以下代码中: 公共类链接列表 { 节点头;//列表头 /*链表节点*/ 类节点 { int数据; 节点下一步; 节点(int d){data=d;next=null;} } public void append(int new_数据) { /*1.分配节点& 2.输入数据 3.将next设置为null*/ Node new_Node=新节点(新_数据)
公共类链接列表
{
节点头;//列表头
/*链表节点*/
类节点
{
int数据;
节点下一步;
节点(int d){data=d;next=null;}
}
public void append(int new_数据)
{
/*1.分配节点&
2.输入数据
3.将next设置为null*/
Node new_Node=新节点(新_数据);
/*4.如果链接列表为空,则将
作为头部的新节点*/
if(head==null)
{
head=新节点(新_数据);
返回;
}
/*5.这个新节点将是最后一个节点,所以
将下一个设置为null*/
new_node.next=null;
/*6.否则遍历到最后一个节点*/
最后一个节点=头部;
while(last.next!=null)
last=last.next;
/*7.更改最后一个节点的下一个节点*/
last.next=新节点;
返回;
}
公共静态void main(字符串[]args)
{
/*从空列表开始*/
LinkedList llist=新LinkedList();
//插入6。这样链表变成6->NUllist
附加(6);
//在末尾插入4。这样链表就变为
//6->4->空列表
附加(4);
plist.printList();
}
公共作废打印列表()
{
节点tnode=头部;
while(tnode!=null)
{
System.out.print(tnode.data+“”);
tnode=tnode.next;
}
}
}
虽然我可以可视化遍历(last
到达llist
的末尾),但我不明白为什么last=last.next
(在public void append(int new_data)
中)将节点链接到上一个节点(为什么上一个。下一个指向它)
谢谢你的支持 基本链表只是从头节点开始,列表中的每个节点指向列表中的下一个节点。最后一个节点将其next
设置为null
,直到添加新节点,此时新节点成为最后一个节点
因此,这里的逻辑是:
/* 6. Else traverse till the last node */
Node last = head;
while (last.next != null)
last = last.next;
/* 7. Change the next of last node */
last.next = new_node;
它从头部开始,然后查看下一个。如果它不是null
,则表示它仍然不是列表的实际最后一个节点,因此它将last
变量设置为下一个。直到最后它找到一个将其next
设置为null
的。last
变量仅在while循环完成时才是实际的最后一个变量
然后,它只是将last
节点的next
设置为新节点。新节点已经将其next
设置为null
,因此下一次遍历时,它将是最后一个节点。如果您只是将代码更改为类似的内容,该内容仍然相同,但提供了另一个视角,可能会有所帮助。有时变量的命名会让您感到困惑
为了更好地理解,请将last
重命名为current
,因为您从头部开始,然后依次查看每个节点,直到找到一个节点,其中next
指向null
,表示列表结束
请记住,.next
本身是一个节点,current
用作迭代器。
您还可以将其编写为
for
循环:
Node current = head;
for(current; current.next != null; current.next)
//now current refers to the last node since current.next now points to null
current.next = new_node;
//The new end is now new_node - new_node.next points to null
这里有一个,希望能有所帮助。我知道last
应该放在列表的末尾,我也知道last的方式和原因。下一个指向新节点。我不明白的是,前一个节点如何以及为什么有一个指向last
的指针。在当前代码中,为什么last
链接到另一个元素?它是否应该是值为6的节点的副本(因此不链接到以前的节点)?在下面的可视化中,我不理解步骤34>35:shorturl.at/amIO5last
没有放在任何地方。它只是对已经存在的节点的引用。这就像你的手指沿着列表中的节点链,从头部开始(上面写着Node last=head
),然后通过检查指向下一个节点的next
引用来完成,因此将手指移动到列表中的下一项。这就是while循环中正在发生的事情。当没有其他内容(while循环中的条件)时,您知道last
指向列表的实际结束节点。因此,新的_节点将跟踪它。您可以通过设置last.next
参考来实现。