【发布时间】: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