无头单链表节点的删除以及新节点之前的插入

    想要理解这两种操作,我们首先需要了解的是什么事无头单链表,无头单链表就是指的没有头指针的一个单独节点。就好比我们永指针遍历链表一样,某一时刻指针指向的一个非尾节点就是一个无头单链表。这样一个链表的最大特点就是该节点我们只知道它的数值以及一个指向下一个节点的指针。

    现在来考虑我们需要做的操作,一个添加一个删除,首先是删除。我们知道,在一个链表中,我们如果想要删除某一个节点,我们首先需要知道该节点的上一个节点以及该节点的下一个节点,删除时我们只需要将上一个节点的节点指针直接指向该节点的下一个节点即可。简单来讲就是将该节点的指针直接赋给上一个节点的指针即可。而我们如果要操作一个无头指针,我们无法搜寻到该节点的上一个节点。这时我们可以先将下一个节点的值赋给该节点,等于说让两个节点保存的值相同,然后删除下一个节点即可。这样我们无需该节点的上一个节点即可办到。这样我们就成功将当前节点删除了。在C中代码如下

void	DeletNotTailNode(Pnode *phead)//删除无头链表的指定节点  参数需要传入当前节点
{
	assert((*phead));
	(*phead)->date=(*phead)->next->date;//将下一节点的值复制到当前节点删除下一节点 即是删除当前节点
	(*phead)->next=(*phead)->next->next;
}
    同理,添加也是相同的道理,添加我们需要新创建一个节点然后将新的节点接在当前节点的下一个节点,此时我们只需要互换两个节点保存的值即可。代码如下
void InsertNotTailNode(Pnode *phead,Datetype date)//在无头单链表非头节点前插入新节点
{
	Pnode _new;
	Datetype i=0;
	_new->date=date;
	_new->next=(*phead)->next;
	(*phead)->next=_new;//将新节点插入到当前节点的下一个节点
	i=(*phead)->date;
	(*phead)->date=_new->date;
	_new->date=i;//交换两个节点数据上的值
}

以上只是本人自己的总结,如有问题,望各路大佬多多指导 多谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值