【问题标题】:Insert an element at index for linked list c++在链表c ++的索引处插入一个元素
【发布时间】:2015-09-17 06:49:51
【问题描述】:

我正在尝试在链表中的索引位置插入一个新元素。为此,我正在考虑使用新数据创建一个新节点,并使索引 (n-1) 处的前一个节点指向新节点。然后,我想删除(n-1)之前指向的节点(whew)。

bool LinkedList::InsertAtIndex(int value, int index) 
{
    LinkedListNode* temp = new LinkedListNode();

    temp->data = value;
    temp->next_node = NULL;

    if (index == 1) 
    {
        temp->next_node = head;
        head = temp;

        return true;
    } 

    LinkedListNode* temp2 = head;

    for (int i = 0; i<index-2; i++) 
    {
        temp2 = temp2->next_node;
    }

    temp->next_node = temp2->next_node;

    temp2->next_node = temp;

    delete [] temp;

    return true;
}

格式有点问题,但可以编译。但是在运行时会出现分段错误。我假设我的逻辑是错误的,所以任何帮助将不胜感激。

【问题讨论】:

  • 在尝试编码之前先尝试在纸上制作。例如,绘制三个带有箭头的框,从一个到另一个,表示一个具有三个节点的链表。然后考虑如何在第一个和第二个节点之间放置一个新节点,需要添加哪些箭头(链接),需要修改哪些箭头。将其实现为代码。然后回到论文返回,开始考虑极端情况,添加为新的第一个或最后一个节点,或者当列表为空时。
  • 并使用调试器。您可能会很快看到,是什么导致了段错误
  • 您应该删除调试 cmets 之类的内容,这将有助于这里的其他人能够更好地理解您的代码。
  • 为什么要在插入列表后删除temp?没有理由这样做,它只会破坏 LinkedList 中的所有指针。我错过了什么吗?
  • 对不起,我刚刚意识到你在问题中的最后一句话(然后,我想删除(n-1)之前指向的节点)。删除了我的答案。

标签: c++ linked-list segmentation-fault


【解决方案1】:

我猜是

delete [] temp;

temp 不是数组,所以你应该通过

释放内存
delete temp;

此外,我建议使用智能指针而不是原始指针(查找 std::shared_ptr 或 Wikipedia 以开始使用:https://en.wikipedia.org/wiki/Smart_pointer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 2021-12-30
    相关资源
    最近更新 更多