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

题目:

  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;
}


代码图片

完整代码图片


结束语

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

猜你喜欢

转载自blog.csdn.net/Zchengjisihan/article/details/130002495
今日推荐