剔除一个没有头节点链表中的某个节点

删除一个没有头节点链表中的某个节点

题目描述:给定一个链表,没有头节点,如何删除其中的某个随机节点呢?

分析:如果一个链表没有头节点的话,那么我们就不可以找到被删除节点的前面一个节点。如何按照这个思路来,就无法实现功能了。
不如我们换一个思路,删除节点的目的是什么?是要达到被删除节点中的data被删除,也就是说,我们实际上只需要删除该节点的data,而不是整个节点。如何实现呢?我们可以把需要删除节点的后面一个节点中的data,依次往前面赋值,并把此节点删除,即可。例如:ABCD三个节点,假如我们需要删除B节点,那么我们可以把C->data赋值给B->data,让D和B相连,删除C,即可。

代码如下:

void DeleteNode(node* pCurrent)
{
    if(pCurrent == NULL)
        return NULL; 
    node* pNext = pCurrent->next; 
    if(pNext != NULL)
    {
        pCurrent->next = pNext->next; 
        pCurrent->data = pNext->data; 
        delete pNext; 
    }
}

参考:
《编程之美》