struct Node {
int key;
Node* next;
};
void insert_after(Node* head, int key, int newKey )
{
if(head != NULL){
Node* temp = head;
while(temp!=NULL && key != temp->key){
temp = head->next;
}
if(temp != NULL){
Node* afterInserted = temp->next;
Node* inserted = new Node;
inserted->key = newKey;
inserted->next = afterInserted;
temp->next = inserted;
}
}
}
insert_after在给定链表中包含值为"key"的节点之后插入一个值为"newKey"的新节点。如果没有找到钥匙,什么也不会发生。
然而,当我从main中运行这个函数时,它的值不在我的链表中,主函数停止,并且在调用insert_after后不完成任何事情。为什么会发生这种情况?
我的推理是,如果键不存在于链表中,最终temp将被设置为NULL,这将打破"while"循环,并跳过第二个"if"循环。这些循环中有一个没有断裂吗?
如果列表有多个节点且head->next
的键不匹配,则此while循环无限循环:
while(temp!=NULL && key != temp->key){
temp = head->next;
}
您希望将temp->next
分配给temp
,而不是head->next
。因此,代码变成:
while(temp!=NULL && key != temp->key){
temp = temp->next;
}