键函数的链表插入被某些参数卡住了


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;
    }

相关内容

  • 没有找到相关文章

最新更新