有關鍊錶的回文檢測,用到的就是鍊錶操作中常常用到的雙指標的方法,找到鍊錶的中點位置,然後依次對比兩邊的結點。但是在找鍊錶的中點的時候要注意鍊錶的總個數是偶數或者奇數的兩種情況。
1.找鍊錶的中點位置,並把中點以前的各個結點的值存入到棧中。2.針對偶數或者奇數個鍊錶結點,對中點結點做乙個小的調整。
3.依次對比棧中結點的值後鍊錶後半部分結點的值是否相等,決定是否是回文結構。
**實現:
bool ispalindrome(listnode* head)stacks;
//找到鍊錶的中點
listnode *fast = head;
listnode *low = head;
while(fast != null && fast->next != null)
//while
if(fast != null)
//對比前後兩段鍊錶的內容
while(low != null)
low = low->next;
s.pop();
}//while
return ispalindrome;
}
這種方法能夠實現o(n)的時間複雜度,但是他的空間複雜度同樣是o(n).
對鍊錶的後半部分逆序,這樣就能一次對比前半部分和後半部分的不同了。
bool ispalindrome(listnode* head)if(fast != null)
//逆序鍊錶的後半部分
listnode dummy(-1);
dummy.next = low;
while(low->next != null)
//while
//對比前後兩部分
low = dummy.next;
fast = head;
while(low != null)
return true;
}
回文檢測題解
題目右轉luogu1210 我看到這道題的第一想法是列舉答案 長度 但是很顯然會超時,怎樣優化列舉是關鍵 我想到了二分答案。但是二分答案要求答案具有單調性。乍一看,似乎回文子串沒什麼單調性。但是如果我們將答案分為奇偶兩種,答案的單調性就出來了 1.當最長回文串長度是奇數時 不妨假設長度為 9 那麼我...
檢測串str是否回文的演算法
此題是殷人昆編著的 資料結構 c語言描述 中佇列的題目,頁碼84.題 給出乙個字串行,判斷它是否是回文。回文是指乙個字串行以中間字元為基準,兩側字元完全對稱相等。例如,字串行 abcba 或 abccba 即為回文,而 abcdefg 就不是回文。解 可以利用乙個佇列和乙個棧來解決問題。首先把給定的...
回文字串檢測
回文是指這樣一種現象 乙個單詞 短語或數字,從前往後寫和從後往前寫都是一樣的。比如,單詞 dad racecar 就是回文 如果忽略空格和標點符號,下面這個句子也是回文,a man,a plan,a canal panama 數字1001也是回文。方法一 利用棧來實現 判斷是否是回文字串 定義乙個棧...