小白算法積累——單鏈表26#中心對稱判斷

題目:設單鏈表的表頭指針爲L,結點結構由data和next兩個域構成,其中data域爲字符型。試設計算法判斷該鏈表的全部n個字符是否中心對稱。例如xyx,xyyx,都是中心對稱。
關鍵字:單鏈表+中心對稱判斷

思路
使用棧來判斷鏈表中的數據是否中心對稱。
原理:
棧是先進後出,所以前一半鏈表中元素可以實行“逆置輸出”,此時和後一半元素進行比較,可以判斷中心對稱性

1)讓鏈表的前一半元素一次進棧。
需要變量:
鏈表L,鏈表的長度n,遍歷工作指針p;
字符棧S[n/2], 進棧小助手 i ;

2)在處理鏈表的後一半元素時,
當訪問到鏈表的一個元素後,就從棧中彈出一個元素,兩個元素進行比較

3)從單鏈表前後兩段中依次各取一個結點,按要求重排。

int dc(LinkList L,int n){//L是帶頭結點的n個元素單鏈表,本算法判斷鏈表是否是中心對稱
  int i;
  char s[n/2];//s字符棧
  p=L->next;//p是鏈表的工作指針,指向待處理的當前元素
  for(i=0;i<n/2;i++){//鏈表前一半元素進棧
     s[i]=p->data;
     p=p->next;
     }
  i--;//恢復最後的i值
  if(n%2==1)//若n是奇數,後移一位,移過中心結點
     p=p->next;
  while(p!=NULL&&s[i]==p->data){//檢測是否中心對稱
     i--;//i充當棧頂指針
     p=p->next;
  }
  if(i==-1)//此時棧爲空棧,說明所有後半鏈表中的元素都滿足對稱要求
     return 1;//鏈表中心對稱
  else
     return 0;//鏈表不中心對稱
}

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