假设有一个没有头节点的单链表。一个指针pCurrent指向此单链表中间一个节点(非头,尾节点),将该节点从此单链表中删除。
将一个节点删除,也即将指针释放,但是,我们要保证删除后不破坏单链表的结构。
一般的思想是:找到要释放指针的前驱,将前驱与后驱直接连接。但是,无头的单链表,我们无法通过遍历来找到它的前驱。
如上图,B节点,即我们要删除的节点,既然不能删除B后,将A和C连接起来,我们不妨将C的date赋值给B,从而删除C,以偷梁换柱的方法达到我们的目的,代码如下:
//从无头单链表中删除节点 void DeleteRandomNode(node* pCurrent) { assert(pCurrent != NULL); node* pNext = pCurrent -> next; if(pNext != NULL) { pCurrent -> next = pNext -> next; pCurrent -> date = pNext -> date; delete pNext; } }
从无头单链表中删除节点
最新推荐文章于 2017-07-17 23:59:12 发布