问答题 试编写在带头结点的单链表中删除(一个)最小值结点的(高效)算法void delete(Linklist&L)。【北京理工大学2001九、3(8分)】
【正确答案】正确答案:1ist一>link; pre=1ist; //p指向待处理结点,pre指向最小值结点的前驱 q=p; //q指向最小值结点,初始假定是第一结点 while(p一>link) {if(P一>link一>datadata){pre=p;q=p一>link;) //找到新的最小值结点 p=p一>link;) if(q|=list一>link) //若最小值是第一元素结点,则不需再操作 fpre一>link=q一>link; //将最小值结点从链表上摘下 q一>link=list一>link; //将q结点插到链表最前面 1ist->link=q ; } 38题是双向链表,设有头结点,插入最多涉及4条链的修改,核心语句段如下: {q=d一>rlink; //设链表有头结点 while(q) {if(q一>data>p一>data)p=q; //P记数据域值最大的结点,初始是第一结点 q=q->rlink; } P一>llink->rlink=p->rlink;p一>rlink一>1link=p一>11ink; //将P摘下 p一>rlink=d一>rlink;p->llink=d;d一>rlink一>llink=p;d->rlink=p; //插入P结点
【答案解析】