删除一个单链表的非尾结点,并且不能遍历链表,所以我们可以尝试删除其他结点以代替此节点,在这里,我们用要删除的结点的下一个结点来代替此节点,删除下一个结点之前,先将这个节点保存起来,再把此结点的值域和指针域赋值给原本要删除的结点,这样一来,只用删除当前被保存起来的结点即可。
部分代码:
// 删除单链表的非尾结点
void DeleteNotTailNode(PNode pos)
{
PNode pCurNode = NULL;
if(pos == NULL || pos->_pNext == NULL)
return;
pCurNode = pos->_pNext;
pos->_data = pCurNode->_data;
pos->_pNext = pCurNode->_pNext;
free(pCurNode);
}
// 使用递归实现从尾到头打印单链表
void PrintFromTail2Head(PNode pHead)
{
if(pHead == NULL)
return;
PrintFromTail2Head(pHead->_pNext);
printf("%d->",pHead->_data);
}