链表:删除所有值是date的结点

删除所有值是date的结点:

思路:找到所有date的值(即按值查找),类似头删一样删除值是date的结点,注意,第一个结点值是date时,头节点得变化;最后一个结点值是date时尾结点得变化(即头删,尾删)。

//删除节点的所有date值
int DeleteAllDate(SHead* s,SListDataType date) {
	//边界判断
	//1.链表不存在
	assert(s != NULL);
	//2.链表为空
	assert(s->first != NULL);
	//注意分情况讨论:第一个结点是date ,头节点改变;
	//最后一个结点是date,尾结点改变,就是头删尾删,

	//找date值得所有结点
	//这就是按值查找
	SListNode* cur = s->first;
	SListNode* arr;
	while (cur->next!=NULL) {
		//第一个结点数据是date——头删
		if (cur->value==date) {
			cur = cur->next;
			free(s->first);
			s->first = cur;
			continue;
		}
		//最后一个节点数据是date——尾删
		if (cur->next->value==date&&cur->next==NULL) {
			cur->next = NULL;
			free(cur->next);
		}
		//其他节点删除情况
		if (cur->next->value==date) {	//找到值是date的结点,但是这时候cur还是在值是date的上一个结点。
			arr = cur->next;	//arr代表值是date的结点
			cur->next = arr->next;	//date的上个结点指向date的下一个结点
			free(arr);
		}
		else {
			cur = cur->next; //没找到继续找
		}
	
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值