题目描述:给定一个链表,没有头节点,如何删除其中的某个随机节点呢?
分析:如果一个链表没有头节点的话,那么我们就不可以找到被删除节点的前面一个节点。如何按照这个思路来,就无法实现功能了。
不如我们换一个思路,删除节点的目的是什么?是要达到被删除节点中的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;
}
}
参考:
《编程之美》
原文地址:http://blog.csdn.net/puqutogether/article/details/43671665