leetcode 234 判斷是不是回文鍊錶

2022-06-29 19:45:10 字數 1771 閱讀 8950

聰明的我想到了利用棧先進後出的特性,求出鍊錶的長度之後前一半入棧,後一半出棧的方法,雖然簡單易懂,但是效率有點低,貼**

/*

* * definition for singly-linked list.

* struct listnode

* listnode(int x) : val(x), next(nullptr) {}

* listnode(int x, listnode *next) : val(x), next(next) {}

* }; */

class

solution

nice =head;

intj;

for(j = 0 ; j < i/2 ; j++)

if(i-2*j)

nice = nice->next;

for(; j > 0 ; j--)

else

return

false

; }

if(good.empty())

return

true

;

else

return

false

; }

};

遞迴的方法相當巧妙,畫畫圖對著**應該能整明白,下面貼**

/*

* * definition for singly-linked list.

* struct listnode

* listnode(int x) : val(x), next(nullptr) {}

* listnode(int x, listnode *next) : val(x), next(next) {}

* }; */

class

solution

return

true

; }

bool ispalindrome(listnode*head)

};

最巧妙的是一旦遞迴中有一步返回false,就會觸發連鎖反應,false到盡頭,雖然效率很差。

還有一種方法,通過快慢指標,找到節點的中間位置,然後通過反轉鍊錶的方法,將後部分翻轉,並進行比較

新增一下該做法的**,最具參考意義的是翻轉鍊錶的過程,其中用了虛頭部來實現不斷的翻轉,貼**

1/**

2* definition for singly-linked list.

3* struct listnode

7* listnode(int x) : val(x), next(nullptr) {}

8* listnode(int x, listnode *next) : val(x), next(next) {}

9* };

10*/

11class

solution

29//

長度為奇數

30if

(fast)

31 slow = slow->next;

32//

虛頭的next指標指向反轉後鍊錶的頭結點

33 listnode* halfhead = dummyhead->next;

34while(slow &&halfhead)

3541

return

true

; 42}

43 };

LeetCode 234 判斷回文鍊錶(c語言)

以前有過判斷回文串,但是對於回文鍊錶,由於鍊錶具有不可回溯性,所以可能需要借用一定空間。請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?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 使用棧 使用快慢指標找中點,原理是每次快指標走兩步,慢指標走一步,等快指標走完時,慢指標的位置就是中點。我們還需要用棧,每次慢指標走一步,都把值存入棧中,等到達中點時,鍊錶的前...