leetcode之234回文鍊錶Golang

2022-06-07 11:36:09 字數 850 閱讀 5817

這道題的限制是時間複雜度是o(n),空間複雜度是o(1),所以我們不能使用常規的方法,常規的方法就是將鍊錶中的資料儲存在陣列中,然後通過陣列判斷是否是回文陣列,這自然很簡單

所以在本題,我們採用的思路就是將鍊錶的後面半部分反轉,然後再比較前面半部分和後面半部分是否相同

首先我們需要找到後面半部分,採用的方法是雙指標的思路,快指標每次向後面走兩步,慢指標每次向後面走一步,當快指標走到鍊錶最後的時候,慢指標剛好走了一半,具體如下:

然後從慢指標的下乙個結點開始反轉鍊錶

此時就可以從原本的鍊錶末尾向前遍歷半個鍊錶了,然後將第乙個元素與最後乙個元素比較,第二個元素與倒數第二個元素比較。。。

如果中間出現了不相等的元素,那麼就直接返回false,如果整個鍊錶的元素都比較完了,那麼就返回true

**如下

func ispalindrome(head *listnode) bool 

fast, slow := head.next, head

for fast != nil

fast = fast.next

if fast.next == nil

fast = fast.next

slow = slow.next

}// 反轉後面半部分的鍊錶

pre := slow.next

cur := pre.next

for cur != nil

reverse := pre

for head != slow.next else

}return true

}

leetcode之234回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?此題分三步進行 第一步先找出中間節點,第二步從中間節點開始反轉,第三步比較後面部分反轉後與前面部分是否相等,如下 ...

LeetCode 234 回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。definition for singly linked list.struct listnode bool ispalindrome struct listnode head 示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 要...

leetcode 234 回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2輸出 false 示例 2 輸入 1 2 2 1輸出 true 解法1 使用棧 使用快慢指標找中點,原理是每次快指標走兩步,慢指標走一步,等快指標走完時,慢指標的位置就是中點。我們還需要用棧,每次慢指標走一步,都把值存入棧中,等到達中點時,鍊錶的前...