主题:求助一道题!很简单的!会的快回谢谢!~!!`
wb1250
[专家分:0] 发布于 2006-10-09 21:58:00
1.试编写在带头结点的单链表中删除一个最小值结点的高效算法。
要求用void decete(linklist&l)
回复列表 (共6个回复)
沙发
avenger07 [专家分:160] 发布于 2006-10-09 23:57:00
不知道你的高效的标准是什么?
我觉得你可以先对单链表元素进行排序,再删除最小值结点。
板凳
大鹏鸟1海阔天空 [专家分:890] 发布于 2006-10-10 17:28:00
你的是一个单列表,要找出最小值,至少要对整个列表扫描一遍(当然是没有排好序),不知道高效的标准是什么,我想先扫一遍,找出来后,在去删除。
3 楼
liuyubobobo [专家分:20] 发布于 2006-10-12 15:08:00
decete是什么?
排完序以后时间复杂度是O(nlogn)
但完全可以扫一遍,就能记住最小值的位置,然后删除,O(n)复杂度
4 楼
zkkpkk [专家分:0] 发布于 2006-10-15 16:02:00
升序排序,删除第一个节点
5 楼
citystar [专家分:0] 发布于 2006-10-17 14:52:00
先排序啊,从小到大排序,然后把首元节点删除掉就可以了
6 楼
david520042 [专家分:60] 发布于 2006-10-20 00:09:00
用p从头到尾扫描单链表,PRE指向*p接点的前驱,用minp保存最小值的接点指针,minpre指向*minp接点的前驱.一面扫描,一面比较,将最小值的接点放到*minp中.
由于没有编辑器 直接敲的看的不舒服不好意思!
void delnode(SNode *h)
{
SNode *pre=h,*p=pre->next,*minp=p,*minpre=pre;
while(p!=NULL){
if(p->data<minp->data){
min=p;
minpre=pre;
}
pre=p;
p=p->next;
}
minpre->next=minp->next;
free(minp)
}
我来回复