小白算法積累——單鏈表19#帶頭結點循環單鏈表+循環刪除最小值

題目:設有一個帶頭結點的循環單鏈表,其結點值均爲正整數。設計一個算法,反覆找出單鏈表中結點值最小的結點並輸出,然後將該結點刪除,直到單鏈表爲空爲止,再刪除頭結點。
關鍵字:帶頭結點單鏈表 +循環刪除最小值

思路
關注:查找最小值+刪除該結點+循環上述操作

1.遍歷單鏈表,用minp來指向疑似最小值,直到最後找到。
2.進行刪除操作
3.重複上述操作,直到表空,刪除頭結點

需要變量:L, 工作指針p,前驅指針pre(?)
“疑似最小值指針”minp,minpre(執行刪除操作,minpre-next=minp->next)

void Del_All(LinkList &L){//本算法實現每次刪除循環單鏈表中的最小元素,知道鏈表爲空爲止
   LNode *p,*pre,*minp,*minpre;
   while(L->next!=L){//表不空,循環
     p=L->next;pre=L;//p爲工作指針,pre爲前驅指針
     minp=p;minpre=pre;//minp爲最小值指針,minpre爲其前驅
     while(p!=L){//當一次從頭到尾的遍歷沒有結束
        if(p->data<minp->data){
        minp=p;minpre=pre;//找到值更小的結點
        }
        pre=p;p=p->next;
        }
     printf("%d",minp->data);//輸出最小值結點元素
     minpre->next=minp->next;//最小值結點從表中斷開
     free(minp);//釋放空間
    }
    free(L);//釋放頭結點
   }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章