思路:
- 之前删除链表中某个位置的结点必须找到该节点的prev结点,并且需要遍历,而此题不能遍历,则之前的方法行不通。那么就想到了另一种方法——替换法。
替换法:
- 既然要删除该结点,那么我们可以将该结点的next结点的值赋给该结点,再删除这个next结点,这样就相当于删除了该结点。
代码:
void EraseNotTailNode(pNode pos)
{
pNode pDel = NULL;
if (pos == NULL && pos->next == NULL)//排除空和尾结点的情况
{
return;
}
pDel = pos->next;
pos->data = pDel->data;//传值
pos->next = pDel->next;
free(pDel);
pDel = NULL;
}