31、【棧和佇列】判斷連結串列是否為中心對稱(C++版)
阿新 • • 發佈:2021-01-28
題目描述
題目分析
本題的目標是判斷以中心為軸,左右兩端是否對稱。棧具有後進先出的特性,因此可先遍歷前半部分儲存至棧中,再遍歷後半部分,同時,依次讓棧中的元素出棧,來判斷比較是否相等。若全相等則為對稱,若過程中有不相等時,則為部隊稱。
關鍵便是先找到中心點,但有奇數個數序列和偶數個數序列這兩種情況,需要分情況討論。
程式碼實現
int dc(LinkList L, int n){
// L帶有頭結點
if(L->next == NULL || L->next->next == NULL) return 0;
int i;
vector<char> s(n/2); // 向下取整
for(i = 0; i < n/2; i++){
L = L->next;
s[i] = L->data;
}
//若n為奇數時,將L指向中點的下一個結點
if(n % 2 == 1) L = L->next->next;
// 因為在上面for迴圈中i多加了一個1,因此先減去1
while(L != NULL && s[--i] == L->data) L = L->next;
if(i == 0) return 1;
else return 0;
}