从链接列表中删除节点

时间:2014-03-20 13:14:30

标签: c++ linked-list

我一直坚持使用此功能从列表中删除节点,如果列表中有两个名称它们都已消失。如果Anne和John在列表中并且我想删除Anne,那么我的列表是空的,John已经离开了。

如果我删除节点init,我在连接列表中缺少什么?

bool ContactList::remove(string key)
{
      NodePtr prev = NULL;

       for(NodePtr temp = head; temp != NULL; temp = temp->link)
       {
            if(temp->data.key == key)
            {
                if(prev == NULL)
                {
                    head = temp->link;
                    delete temp;
                    return true;
                }
                else
                {
                    prev = temp->link;
                    delete temp;
                    return true;
                 }

             }

         }
     return false;
}

2 个答案:

答案 0 :(得分:2)

在循环的每次迭代中,您都没有使prev保持最新状态。你想要这样的东西:

prev = temp;

位于for循环的底部。

答案 1 :(得分:1)

尝试使用此功能

bool ContactList::remove(string key)
{
  NodePtr prev = NULL;

   for(NodePtr temp = head; temp != NULL; temp = temp->link)
   {
        if(temp->data.key == key)
        {
            if(prev == NULL)
            {
                head = temp->link;
                delete temp;
                return true;
            }
            else
            {
                prev->link = temp->link;   // change.
                delete temp;
                return true;
             }

         }
         prev = temp;      // change.
     }
 return false;
}