題目描述
基本思路
1、利用快慢指標,快指標每次走兩步,慢指標每次走一步,找到鍊錶中點。
2、把後半部分逆序。
3、比較前後兩部分。
奇數長度的鍊錶和偶數長度的鍊錶操作不同點:
查詢中點:奇數鍊錶結束時,以fast->next
為空結束;偶數鍊錶以fast
為空結束。
逆序:**實現中沒有把前半部分鍊錶最後乙個元素的next
指標設為空。結果是偶數鍊錶前半部分煉錶比後半部分鍊錶長度多1。
// slow指標指向中點
listnode *first = slow;
listnode *second = first-
>next;
// 逆序後半部分
while
(second)}
slow-
>next =
nullptr
; listnode* head2 = first;
while
(head && head2)
return
true
;}敲黑板、記筆記
回文,順序、逆序讀結果相同。
單向鍊錶可以順序讀,無法逆序讀。
提到逆序,應該自然可以聯想到棧,再聯想到遞迴。
題目要求空間複雜度為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 使用棧 使用快慢指標找中點,原理是每次快指標走兩步,慢指標走一步,等快指標走完時,慢指標的位置就是中點。我們還需要用棧,每次慢指標走一步,都把值存入棧中,等到達中點時,鍊錶的前...
LeetCode 234 回文鍊錶
請判斷乙個鍊錶是否為回文鍊錶。解題思路 根據 o n 時間複雜度和 o 1 空間複雜度的要求,則不能使用堆疊。首先找到中間節點,然後反轉中間節點之後的節點,最後比較頭結點和中間節點之後元素的大小。bool solution ispalindrome listnode head 1.找到鍊錶的中間位置...