下面的片段无法在链接列表的末尾插入节点。
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'和第二个算法'curr-> next'两者都相似,当“while loop”终止时? 如果它不相似那么为什么呢?
答案 0 :(得分:1)
您必须了解指针是一个变量,其值是一个地址。
第一种算法是错误的,因为当你完成while循环的迭代时,curr指向NULL(地址0x0),而NULL不是你列表的有效节点。
第二个算法有效,因为当你完成while循环的迭代时,curr指向列表的最后一个节点,然后你将newNode添加到curr->接下来,用newNode的地址替换NULL。
希望这有帮助! :)