回 帖 发 新 帖 刷新版面

主题:求助一道题!很简单的!会的快回谢谢!~!!`

1.试编写在带头结点的单链表中删除一个最小值结点的高效算法。
要求用void decete(linklist&l)

回复列表 (共6个回复)

沙发

不知道你的高效的标准是什么?
我觉得你可以先对单链表元素进行排序,再删除最小值结点。

板凳

你的是一个单列表,要找出最小值,至少要对整个列表扫描一遍(当然是没有排好序),不知道高效的标准是什么,我想先扫一遍,找出来后,在去删除。

3 楼


decete是什么?
排完序以后时间复杂度是O(nlogn)
但完全可以扫一遍,就能记住最小值的位置,然后删除,O(n)复杂度

4 楼

升序排序,删除第一个节点

5 楼

先排序啊,从小到大排序,然后把首元节点删除掉就可以了

6 楼


用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)
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册