C语言 带头结点的单链表中删除所有值为X的节点,以及区间节点并释放其空间

C语言 在带头结点的单链表中删除所有值为X的节点,以及区间节点并释放其空间

算法思想

因为L带头节点所以可以利用节点的前驱节点来删除节点,用*s遍历整个链表,当找到s的下一个节点为X值时,删除s的下一个节点,本算法还可以优化为删除区间节点,他的核心在于改变判断条件

结构体

typedef struct SqNode {
	int data;
	struct SqNode * Next;

}SqNode,*SqList;

删除X值函数

SqList DeleteValueElement(SqNode* L, int Value)
{

	SqList s;
	SqList p;//定义指向待删除的节点
	s = L;
	while (s!=NULL)
	{
		if (s->Next->data == Value)//如果s的下一个节点等于X
		{
			p = s->Next;//记住s的下一节点
			s->Next = s->Next->Next;//s指向下下一个节点
			free(p);//释放等X的节点
		}
		s = s->Next;
	}
	return L;

}

运行截图

在这里插入图片描述

优化

删除区间节点

SqList DeleteSectionElement(SqNode* L,int Value1,int Value2)
{
	/*
	第一个参数:链表的头节点地址
	第二个参数:删除节点区间的开始值
	第三个参数:删除节点区间的结束值
	函数功能:删除[Value1,Value2],区间的节点
	*/
	SqList p;//指定待删除的节点
	SqList s = L;
	while (s->Next!=NULL)
	{
		if (s->Next->data >= Value1 && s->Next->data <= Value2 )//判断节点是否符合条件
		{
			p = s->Next;
			s->Next = s->Next->Next;
			free(p);
		}
		else
		{
			s = s->Next;
		}
	}
	return L;
}

运行截图

在这里插入图片描述

欢迎大家在评论区赐教,谢谢

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~搬~运~工~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值