下面的片段对于在链表的末尾插入一个节点是无效的。
void insert_end(int item){
nodeptr newNode = new ListNode;
newNode->data = item;
newNode->next = NULL;
if(head == NULL){
head = newNode;
curr = head;
}else{
curr = head;
while(curr != NULL) curr = curr->next;
curr = newNode;
}
}
在链表末尾插入一个节点有效的另一个片段。
void insert_end(int item){
nodeptr newNode = new ListNode;
newNode->data = item;
newNode->next = NULL;
if(head == NULL){
head = newNode;
curr = head;
}else{
curr = head;
while(curr->next != NULL) curr = curr->next;
curr->next = newNode;
}
}
我的问题是为什么第一个无效?实际上两个片段应该是相似的。 假设我已经有三个节点。现在我想插入另一个节点。
- 作为第一个算法,当 curr = NULL 时,while 循环将不满足。
- 作为第二种算法,当 curr->next = NULL 时,while 循环将不满足。
当“while 循环”终止时,我可以说第一个算法的“curr”和第二个算法“curr->next”都很相似吗? 如果不相似那为什么呢?
最佳答案
您必须了解指针是一个变量,其值是一个地址。
第一个算法是错误的,因为当你完成 while 循环的迭代时,curr 指向 NULL(地址 0x0),而 NULL 不是你列表的有效节点。
第二个算法有效,因为当您完成 while 循环的迭代时,curr 指向列表的最后一个节点,并且您将 newNode 添加到 curr->next,用 newNode 的地址替换 NULL。
希望对您有所帮助! :)
关于c++ - 在链表的末尾插入一个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42829573/