从无头单链表中删除节点

假设有一个没有头节点的单链表。一个指针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;
	} 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值