c++ - 双链表查找删除

标签 c++ list linked-list delete-operator

我想在双链表中搜索一些东西并删除它。

我的问题是我丢失了前一个节点和我想删除的节点的节点。

这是我的代码:

    int delnode(string moviename)
        {
            node *temp,*del;
            //check empty
            if(!head)
                {
                    cout<<"empty";
                }
            else
                {
                    temp=head;
                while (temp->next!=NULL)
                    {

                        if (temp->title==moviename)
                            {
                                del=temp;
                                temp=temp->previous;
                                temp->next=del->next;
                                delete del;
                            }
                        temp=temp->next;
                    }
                }
        }

例如,如果我有 5 部电影,movie1,movie2,movie3,movie4,movie5 并且想要删除 movie3,我的列表将是 movie1,movie4,movie5 :S

最佳答案

你正在让这件事对你自己造成难以置信的伤害。您的代码有很多问题,包括:

  • 未能正确连接先前的指针
  • 未能说明最后一个节点的删除。
  • 如果它是前景节点,则无法推进头指针。

考虑到这一点,我认为这符合您的要求,我强烈建议您仔细检查它,甚至在调试器中单步执行它以查看它是如何工作的。

void delnode(const std::string& moviename)
{
    // pp holds the address of the pointer that will
    //  eventually point to our node being deleted.
    node **pp = &head;

    // skip nodes until we find a match
    while (*pp && (*pp)->title.compare(moviename))
        pp = &(*pp)->next;

    if (*pp)
    {
        node *tmp = *pp;
        if ((*pp = tmp->next)) // assignment-eval intentional
            (*pp)->previous = tmp->previous;
        delete tmp;
    }
}

这解决了很多问题,包括

  • 如果头指针是与您的字符串匹配的节点,则正确更新头指针。
  • nextprevious 正确连接到所有正确的指针
  • 正确删除列表中的最后一个 节点(如果它是您的可疑节点)。
  • 如果头指针为空则什么都不做。

关于c++ - 双链表查找删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20203719/

相关文章:

c++ - 当程序失去焦点时 WH_FOREGROUNDIDLE 停止

c++ - 如何初始化对在单独文件中声明的类的引用?

C++ nullptr检测

c++ - "Control reaches end on non-void function"with do { 返回结果; } 而(条件);

python - 如何最佳地将数字与字符串分开

python - 从列表中的每个值中提取第一个单词

python - 使用字典从列表中获取键和值

c - 如何从二叉树创建链表(前序/后序)

c - 链表无法正确循环

c++ - 制作一个用指针排序的有效算法