三分钟明白如何实现链表尾删

三分钟明白如何实现链表尾删

什么是链表

下面是我对链表概念的一些总结。
链接: link.

链表实现尾删

我们都知道链表都是每个节点依靠一个指针来指向下一个节点的。
因为链表不支持随机访问 所以要实现尾删我们就需要找到该链表最后一个节点的前一个节点,然后将这个节点的next指针指向由最后一个节点改变为null。
我们可以使用一个指向为空的指针 prev和一个指向头节点的指针tail
因为如果一个链表的节点不是尾节点的话,那么这个节点的
next指针指向的肯定不是NULL,
那如何找该链表最后一个节点的前一个节点呢?
当tail指向的不是NULL时我们让prev 指向tail指向的节点,而tail指向tail的下一个节点,循环直到tail指向null时,prev指向的就是我们要删除的最后一个节点的前一个节点,这样我们就找到了。
你以为这样就完了吗 ?😏
答案是 当然没有完,因为我们还有很重要的一步没有做那就是释放我们要删除的那个结点的空间。如果不是放会产生很严重的后果,会造成内存泄露。

如下图
在这里插入图片描述
在这里插入图片描述

实现如下


//尾删
void popback(list* lst) {
	if (lst == NULL || lst->_head == NULL)
		return;
	//遍历 找到最后一个节点
	listnode* prev = NULL;
	listnode* tail = lst->_head;
	while (tail->_next != NULL) {
		prev = tail;
		tail = tail->_next;
	}
	//释放最后一个节点
	free(tail);
	//更新next
	if(prev==NULL)//只有一个节点更新head节点
	//if (lst->_head->_next == NULL)
	{
		lst->_head = NULL;
	}
	else
		prev->_next = NULL;
	
}

欢迎大家和我一起交流学习知识哦😄

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值