问题:假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个也不是最后一个),如何将该结点删除?
分析:假设给定的指针为pCurrent,Node *pNext=pCurrent->Next(pNext指向pCurrent的下一个结点)。根据题意,pNext!=NULL.
若pCurrent指向中间要删除的节点B,如下图所示:
但是该链表没有头指针,无法扫描到结点A。但是我们可以换一种思路,可以将结点C的数据赋给B,然后将真正的C结点删除,因为删除C结点是很方的,知道其前驱结点。这种方法很妙,结点都是一样的,只是其中的data不一样,现在我们可以把data复制给B结点,再删除真正的C结点,留下的是“假”的C结点。
pCurrent->Next=pNext->Next;
pCurrent->Data=pNext->Data;
delete pNext;