题目:
删除一个无头单链表的非尾节点(不能遍历单链表)
解题思路:首先这个单链表是无头的,所以不能从头开始,也不能遍历单链表。只是给定一个节点,要删除一个节点,首先需要找到上一个节点,但是因为是无头的,所以我们无法知道给定节点的上一个节点,所以就不能去删除给定的节点,但是我们可以去删除给定节点的后一个节点。
如下图:为替换法删除
代码实现:
void DelNode(SListNode *pPos)
{
assert(pPos && pPos->pNext );
//替换法进行删除
SListNode *next = pPos->pNext;
pPos->data = next->data;
pPos->pNext = next->pNext;
free(next);
}