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插入一个新节点,其值为" newKey"在包含值" key"的节点之后的给定链表中。如果找不到密钥,则不会发生任何事情。
但是,当我使用不在我的链表中的值从main运行此函数时,main函数会停止,并且在调用insert_after之后不会完成任何操作。为什么会这样?
我的理由是,如果密钥不存在于链表中,最终temp将被设置为NULL,这会打破"而#34;循环,并跳过第二个"如果"环。其中一个循环没有破坏吗?
答案 0 :(得分:0)
如果列表中有多个节点并且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;
}