键功能的链表插入卡在某些参数上?

时间:2014-05-25 22:48:19

标签: c++ linked-list

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;循环,并跳过第二个"如果"环。其中一个循环没有破坏吗?

1 个答案:

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