【数据结构与算法】双链表删除最大值节点

文章介绍了如何使用双链表存储结构,并提供了一个算法来删除链表中的最大值节点。通过创建两个指针p和q,遍历链表并比较数据,找到最大值节点后,更新其前后节点连接并释放内存。同时,提供了计算链表长度和比较数据的辅助函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

  Qestion:使用双链表存储结构,并且写出删除最大值节点的算法


主要思路:

  1. 创建两个指针 p 和 qp用于遍历链表所有元素;q用于指向当前最大的元素的数组
  2. p每经过一个节点就要将p.data  和  q.data对比,若p.data  >   q.dataq指向当前p所指。
  3. 当 p -> next = frist 时遍历完毕,查看此时q所指元素,使q -> prior -> next = q ->prior随后free (q)即可。

图解:

双链表删除最大值节点图解


代码

//求双链表表长
int DllLength(){
	int cnt = 0;
	int m = first;
	while(m -> next != first)
	{
		m = m -> next;
		cnt++;
	}
	return cnt;
}
//比较,若p.data 大于 q.data则将p赋值给q
void compare(int *p, int *q){
	if(p.data > q.data) 
	q = p;
}
//删除双链表最大值节点
void DeleteDllMax(Dll){
	//p、q初始都指向第一个首元节点
	int p = first -> next, q = first -> next;
	for(int i = 0; i < DllLength(); i++){
		//p每移动一次就要将p和q的data进行比较
		p = p->next;
		compare(p , q);
	}
	//遍历完毕后删除q(指向最大值)
	q -> prior -> next = q -> next;
	q -> next -> prior = q -> prior;
	free(q);
	return;
}


代码图片

完整代码图片


结束语

  因为是算法小菜,所以提供的方法和思路可能不是很好,请多多包涵~如果有疑问欢迎大家留言讨论,你如果觉得这篇文章对你有帮助可以给我一个免费的赞吗?我们之间的交流是我最大的动力!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SheathedSharp

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

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

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

打赏作者

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

抵扣说明:

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

余额充值