我正在学习有关链表插入的知识,并遇到了以下代码,以便在链表的末尾插入一个节点(在C ++仍然使用的一本相当陈旧且过时的书中,我不知道为什么):
void Insert_End(Node * np){
if (start == NULL){
start = rear = np;
}
else{
rear -> next = np;
rear = np;
}
}
我的问题是 np->下一个=后方;
PS:np是要在末尾插入的新节点,后方指向最后一个节点,起始点指向第一个节点。
答案 0 :(得分:2)
我的问题是不是应该是np-> next = Rear;
不,下面的图片可以帮助您轻松理解。
首次执行start = rear = np;
时,所有3个节点都可能如下所示。
------
| np |
------
^ ^
| |
---- ----
|start| | rear|
---- ----
连续插入:
当您rear -> next = np;
时,您的列表可能如下所示。
请注意:rear
仍指向列表的最后一个节点,而np1
则指向np2
。
------ -----
| np1 | ---> | np2 |
------ -----
^ ^
| |
---- ----
|start| | rear|
---- ----
rear = np;
执行时,您的rear
将更新为指向当前的最后一个节点。
------ -----
| np1 | ---> | np2 |
------ -----
^ ^
| |
---- ----
|start| | rear|
---- ----
答案 1 :(得分:0)
我的问题是不是应该是np-> next = Rear;
否,因为届时将没有节点指向Worked Class
,因此它不会成为任何列表的一部分(头为Text5
的列表除外)。此外,A
不会在后面,因为它的np
会指向一个节点(先前为np
的节点)。该示例是正确的实现。