题目:
Qestion: 使用双链表存储结构,并且写出删除最大值节点的算法
主要思路:
- 创建两个指针
p
和q
,p
用于遍历链表所有元素;q
用于指向当前最大的元素的数组 p
每经过一个节点就要将p.data
和q.data
对比,若p.data
>q.data
则q
指向当前p所指。- 当
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;
}
代码图片
结束语
因为是算法小菜,所以提供的方法和思路可能不是很好,请多多包涵~如果有疑问欢迎大家留言讨论,你如果觉得这篇文章对你有帮助可以给我一个免费的赞吗?我们之间的交流是我最大的动力!