C++从列表中删除节点
C++ Delete Node From Middle of List
出于某种原因,我从列表中间删除节点的函数正在删除第一个节点,而不是用户指定的节点。这是我的函数:
template< class NODETYPE >
bool List< NODETYPE >::removeMiddle( NODETYPE &value, int i )
{
ListNode <NODETYPE> * tempPtr = firstPtr;
int counter=1;
if ( isEmpty() )
return false;
if (i <= 0)
return false;
while (tempPtr != 0 && counter < i){
counter++;
if ( firstPtr == lastPtr )
firstPtr = lastPtr = 0;
else
firstPtr = firstPtr->nextPtr;
if (counter == i){
value = tempPtr->data; // data being removed
delete tempPtr;
}
}
return true;
RecordCounter--;
}
谁能帮我指出正确的方向?
我假设这是因为:
if ( firstPtr == lastPtr )
firstPtr = lastPtr = 0;
else
firstPtr = firstPtr->nextPtr;
应该检查和修改tempPtr
,而不是firstPtr
。
由于您不按tempPtr
检查,因此您的函数调用
if (counter == i){
value = tempPtr->data; // data being removed
delete tempPtr;
}
但tempPtr
最初设置为firstPtr
,之后再也没有修改过。
当然,您可以通过调试轻松发现这一点,所以我不会为您更正代码,但这是一个很好的起点。
我不知道
lastPtr
是做什么用的,但问题是你是通过改变firstPtr
而不是tempPtr
来迭代的。 然后删除tempPtr
,但这仍然指向列表的头部。
这是因为您分配了tempPtr = firstPtr
,而不是递增tempPtr
,而是递增firstPtr
。
检查以下代码。
while (tempPtr != 0 && counter < i)
{
counter++;
if ( firstPtr == lastPtr)
firstPtr = lastPtr = 0;
else
tempPtr = tempPtr->nextPtr; // Here tempPtr should be incremented not firstPtr
if (counter == i)
{
value = tempPtr->data; // data being removed
delete tempPtr;
}
}
相关文章:
- 为什么我的删除节点函数实际上没有删除节点?
- 为什么"delete"关键字不删除节点?
- 以递归方式从链表中删除节点
- 根据 Pugixml 中的子值删除节点
- 基于给定字符串数据类型的链表删除节点
- 在双向链表中给定节点之后删除节点
- 如何在单链列表 c++ 中正确删除节点
- 在BST堆中删除节点免错误
- 为什么我的打印功能之一删除节点
- 重载运算符>>从二叉树中删除节点
- 删除节点方法实际上不会删除二叉搜索树中的节点.C++
- C bST删除节点会破坏排序算法
- 删除节点并处理新的 nullptr 和链接节点
- 如何从链表中删除节点
- 如何在用于删除节点的函数中检查我的链表是否C++为空
- 从BST删除节点时出错
- 二叉树,从树中删除节点后将其删除
- 链接列表删除节点C
- 在二进制搜索树中删除节点
- 使用类从双向链表中删除节点