删除链接列表C ++中的重复项(Seg Faulting)

时间:2016-02-22 02:06:48

标签: c++ linked-list

我不知道为什么我会遇到这个段错误。我在想它可能与列表遍历有关。我猜到最后,它仍然试图遍历,但它正在看到一个nullptr。

我已经尝试在那里添加另一个条件来检查nextNode是否为nullptr然后停止遍历,但我无法让它工作。

我错过了什么?

void LinkedList::removeDuplicates() 
{
    Node* traverse = m_front;
    Node* nextNode = traverse->getNext();
    Node* duplicate = nullptr;

    if (!isEmpty())
    {
         while(traverse != nullptr)
         {
             if (traverse->getValue() == nextNode->getValue())
             {
                std::cout << "Found duplicate\n";
                duplicate = nextNode;
                nextNode = nextNode->getNext();

                delete duplicate;
                duplicate = nullptr;

                traverse->setNext(nextNode);
            }

            traverse = nextNode;
            nextNode = nextNode->getNext();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您的代码假定列表已排序,否则根本不起作用。

如果列表为空,则遍历将为null,并且nextNode的初始化将崩溃。

最后一行也会崩溃,因为最后一次遍历将为null,而nextnode将为null。

我只是重新排列nextNode并更改while条件:

memset(strfmt, <len>, 0). /* or fill with the date required */
memcpy(strfmt, userinput, <len of user input>).

编辑:添加继续以避免删除最后一个元素的问题和连续跳过三个重复的问题。