【发布时间】:2018-04-04 05:51:49
【问题描述】:
我正在创建一个链表程序,其中一个函数应该删除给定索引处的节点。
我的想法是将节点定位在我希望删除的索引处的节点之前的一个节点,然后将它的下一个指针设置为我希望删除的节点的 ->next 指针,因此“跳过”并将其从列表中删除。
目前我的 for 循环似乎不起作用。在 for 循环运行后,temp->data 的值始终是列表中第二个节点的数据。
例如,节点列表
15 14 13 12 11 10(10 是列表的开头)
如果我想在索引 4 处删除。
temp->data 返回 11,而不是 14。
这是我的代码:
NODE * removeAt(NODE * pList, int index)
{
NODE * temp = pList;
for (int i = 0; i < index - 1; i++)
{
temp = temp->next;
}
NODE * next = temp->next->next;
temp->next = next;
return temp;
}
感谢任何帮助!
【问题讨论】:
-
与您的(当前)问题无关,但您的代码中有一些致命缺陷,所有缺陷都缺少空指针检查。如果用户提供的索引超出范围怎么办?如果没有
temp->next怎么办? -
您确定 10 是列表的开头而不是 15 吗?这也可能会爆炸:
NODE * next = temp->next->next;如果您要删除最后一个节点。 (或者如果索引>列表大小,循环内部可能会爆炸) -
@AaronHolland 你是对的。我把名单的头/尾颠倒了,我应该意识到的。是的,我必须添加一个例外情况。感谢您的帮助!
-
从单链表中删除项目的有用技巧:stackoverflow.com/questions/12914917/… This linked answer 非常详细。
标签: c++ for-loop linked-list increment