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