問題描述
編寫乙個函式,檢查輸入的鍊錶是否是回文的。
示例:
輸入: 1->2方法一輸出: false
輸入: 1->2->2->1
輸出: true
/**
* 要求時間複雜度為o(n),空間複雜度為o(1)
*1.獲取中間位置
* 獲取中間位置,可以通過快慢指標實現
*2.從中間位置一次向兩側對比
* 從中間向兩側對比,需要將左半部分進行翻轉,才能夠實現
*/public
boolean
ispalindrome
(listnode head)
//1.獲取中間位置
//獲取中間位置,可以通過快慢指標實現
listnode slow = head;
listnode fast = head;
//左側鍊錶翻轉後的頭部
listnode pre = null;
while
(fast!=null&&fast.next!=null)
listnode right;
//判斷當前的鍊錶長度是奇數還是偶數
//1->2->3 如果fast有值,則為奇數長度.pre 指向1 ,slow指向2,那麼需要right指向3即可
//1->2->3->4 如果fast有值,則為奇數長度.pre 指向2,slow指向3,那麼需要right=slow即可
if(fast!=null)
else
//2.從中間位置一次向兩側對比
//從中間向兩側對比,需要將左半部分進行翻轉,才能夠實現
while
(right!=null&&pre!=null)
right = right.next;
pre = pre.next;
}return
true
;}
鍊錶 (判斷回文鍊錶)演算法
coding utf 8 author leadingme mail leadingme qq.com mywebsite leadingme.top 回文鍊錶 演算法要求 判斷乙個鍊錶是否為回文鍊錶 示例1 輸入 1 2 輸出 false 示例2 輸入 1 2 2 1 輸出 true class ...
鍊錶回文判斷
判斷一條單向鍊錶是不是 回文 回文,英文palindrome,指順著讀和反過來讀都一樣。判斷回文單向鍊錶跟判斷回文字串很大的區別就是遍歷。字串可以自由向前遍歷,而單向字串不行,因此最簡單直觀的思路就是將鍊錶翻轉,然後再進行比較。但是這種方法就比較笨,因為還需要建立另外乙個單鏈表來儲存原有的單鏈表,然...
判斷回文鍊錶
請判斷乙個鍊錶是否為回文鍊錶。鍊錶為單向無環鏈表 示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 這題是讓判斷鍊錶是否是回文鍊錶,所謂的回文鍊錶就是以鍊錶中間為中心點兩邊對稱。我們常見的有判斷乙個字串是否是回文字串,這個比較簡單,可以使用兩個指標,乙個最左邊...