1. 程式人生 > 其它 >31、【棧和佇列】判斷連結串列是否為中心對稱(C++版)

31、【棧和佇列】判斷連結串列是否為中心對稱(C++版)

技術標籤:演算法刷題連結串列c++資料結構演算法

題目描述

在這裡插入圖片描述

題目分析

本題的目標是判斷以中心為軸,左右兩端是否對稱。棧具有後進先出的特性,因此可先遍歷前半部分儲存至棧中,再遍歷後半部分,同時,依次讓棧中的元素出棧,來判斷比較是否相等。若全相等則為對稱,若過程中有不相等時,則為部隊稱。
關鍵便是先找到中心點,但有奇數個數序列和偶數個數序列這兩種情況,需要分情況討論。

程式碼實現

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; }