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

2021-10-09 05:09:00 字數 750 閱讀 6097

以前有過判斷回文串,但是對於回文鍊錶,由於鍊錶具有不可回溯性,所以可能需要借用一定空間。

請判斷乙個鍊錶是否為回文鍊錶。

示例 1:

輸入: 1->2

輸出: false

示例 2:

輸入: 1->2->2->1

輸出: true

高階:你能否用 o(n) 時間複雜度和 o(1) 空間複雜度解決此題?

1.找到鍊錶的中點。

法一:

遍歷鍊錶,並將num/2;

法二:

用快慢指正依次遍歷,當快指標走到頭時,慢指標剛好在中點位置;

2.將鍊錶的前半部分入棧

3.依次出棧並與鍊錶的後半部分比較。

typedef

struct

creatstack;

bool ispalindrome

(struct listnode* head)

//計算鍊錶元素數量

if(num&1)

flag=1;

num=

(num+1)

/2; p=head;

for(

int i=

0;i(flag)

stack.top--

;while

(p!=

null

)return true;

}

leetcode 234 判斷是不是回文鍊錶

聰明的我想到了利用棧先進後出的特性,求出鍊錶的長度之後前一半入棧,後一半出棧的方法,雖然簡單易懂,但是效率有點低,貼 definition for singly linked list.struct listnode listnode int x val x next nullptr listnod...

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 使用棧 使用快慢指標找中點,原理是每次快指標走兩步,慢指標走一步,等快指標走完時,慢指標的位置就是中點。我們還需要用棧,每次慢指標走一步,都把值存入棧中,等到達中點時,鍊錶的前...