为什么要将currentNode赋给currentNodeBefore
顺序表删除元素,是所有后面的元素往前移动一格。单链表删除节点方便的地方就在这,他不需要所有后面节点前移,而是通过前驱节点连结到后继节点,断开了被删除节点之间的连结。具体实现语句currentNodeBefore->next=currentNode->next;//第i-1个节点与第i+1个节点连接,自然断开与第i个节点的连接。
删除第i个结点需要找到第i和i-1两个结点,所以将currentNode赋给currentNodeBefore,是为了遍历结点,当currentNode为第i个结点的时候,currentNodeBefore是第i-1个结点,然后才能将i-1结点的next指向i+1结点,才能删除i结点、
bool List::ListDelete(int i,Node *pNode)
{
if(i<0 || i>=m_iLength)
return false;
Node *currentNode=m_pList; //保存头节点
Node *currentNodeBefore=NULL; //头节点前一个节点不存在,为NULL
for(int k=0;k<=i;k++) //查找第i个节点
{
currentNodeBefore=currentNode; //找到第i-1个节点
currentNode=currentNode->next; //循环结束代表currentNode就是第i节点
}
currentNodeBefore->next=currentNode->next;//第i个节点指针域赋给第i-1节点指针域
pNode->data=currentNode->data; //删掉节点的数据域赋给pNode输出
delete currentNode; //释放删除节点的内存
currentNode=NULL;
m_iLength--; //节点长度减1
return true;
}