要在不能遍历一遍单链表的情况下,删除单链表的非尾结点。我们可以试试如下这种方法:
首先,我们先建立一个节点pCur,令节点pCur指向要删除的节点pos的下一个节点,然后,我们先把pCur的值赋给pos,然后再删除掉pCur这个节点,示意图如下所示:
令节点pCur指向要删除的节点pos的下一个节点:
我们先把pCur的值赋给pos,然后再删除掉pCur这个节点:
这样,把pCur的值赋给pos,再删除pCur这个节点也就等同于直接删除pos这个节点。
最后,程序如下:
void DeleteNotTailNode(pNode pos)
{
pNode pCur = NULL;
if(pos)
{
pCur = pos->_pNext;
pos->_data = pCur->_data;
pos->_pNext = pCur->_pNext;
free(pCur);
}
}