小白算法積累——單鏈表1#不帶頭結點+按值刪除+遞歸工作棧

題目:設計一個遞歸算法,刪除不帶頭結點的單鏈表L中所有值爲x的結點。
關鍵字:遞歸算法+不帶頭結點的單鏈表+按值刪除+遞歸工作棧

思路
關注:遞歸算法的設計重點在於找到“遞歸”的部分,即重複調用函數,改變部分相關變量

設f(L,x)的功能是:刪除以L爲首結點指針的單鏈表中所有值等於x的結點,遞歸部分:顯然有f(L->next,x)的功能是刪除以L->next 爲首結點指針的單鏈表中所有值等於x的結點。由此,可以推出遞歸模型如下:
終止條件:f(L,x)=不動;若L此時爲空表
遞歸主體:a.若L->data==x
f(L,x)=刪除*L結點;
f(L->next,x);
b.其他情況
f(L,x)= f(L->next,x);

void Del_x_3(Linklist &L,ElemType x){//遞歸實現在單鏈表L中刪除值爲x的結點
   LNode*p;//p指向待刪除結點
   if(L==NULL)
      return;
   if(L->data=x){//若L所指結點的值爲x
   p=L;
   L=L->next;
   free(p);  //刪除此節點
   Del_x_3(L,x);//遞歸調用
  }
 else      //若L所指結點的值不爲x
   Del_x_3(L->next,x);//遞歸調用,對下個元素進行刪除判斷
 }

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