我正在学习链表插入并遇到以下代码以在链表的末尾插入一个节点(在一本相当古老且过时的 C++ 书中仍然使用我不知道为什么):
void Insert_End(Node * np){
if (start == NULL){
start = rear = np;
}
else{
rear -> next = np;
rear = np;
}
}
我的问题是不应该 np -> next = rear;
PS : np 是最后插入的新节点,rear 指向最后一个节点,start 指向第一个节点。
最佳答案
My question is shouldn't it be 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|
---- ----
关于c++ - 链表 - 使用后指针在末尾插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52390404/