2021 1 16 回文鍊錶

2021-10-16 09:43:32 字數 1739 閱讀 8872

題目

示例 1:

輸入: 1->2

輸出: false

示例 2:

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

輸出: true

設定乙個陣列,遍歷鍊錶,將所有結點存入陣列

設定兩個變數,分別乙個指向頭,乙個指向尾

設定迴圈條件:i<=j,迴圈內部兩個指標分別往後往前移動,判斷是否相同即可。不同則跳出迴圈

class

solution

for(

int i =

0, j =

(int

)vals.

size()

-1; i < j;

++i,

--j)

}return

true;}

};

遍歷鍊錶,查詢鍊錶個數

設定一全域性變數,標記結點ptemp,初始指向正中間的結點

遞迴遍歷head,走到正中間的結點開始返回,返回乙個,ptemp往後走乙個,判斷ptemp和head的值是否相同。

a. 相同則返回true;

b.不同則一直返回false;

class

solution

bool

ispalindrome

(listnode* head)

//3. 開始遞迴

n++;return

search

(head);}

bool

search

(listnode* head)

//若總長度為奇數時,head指向中間時,標記指標ptemp和head指向同乙個

else

if(nlength%2==

1&& n == nlength/2+

1)//計數head走了的個數

n++;//如果ptemp為空,head還未走到中間,則繼續遞迴

if(ptemp ==

null

&& head!=

null

)search

(head-

>next)

;//返回時

//1. 如果標記為false,則始終返回false

if(flag ==

false

)return flag;

//2. 如果標記為true,判斷head和ptemp指標的值,不同則設標記為false

if(ptemp !=

null

&& flag ==

true)}

return flag;}}

;

head指標,不斷深入到後乙個

設乙個標記指標ptemp,初始指向第乙個元素

遞迴返回,判斷head和ptemp指向的結點值是否相同

不同則一路返回false;

相同ptemp往後移,head返回;

class

solution

if(currentnode-

>val != frontpointer-

>val)

frontpointer = frontpointer-

>next;

}return

true;}

bool

ispalindrome

(listnode* head)};

234 回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2輸出 false示例 2 輸入 1 2 2 1輸出 true首先建立兩個指標指向鍊錶,然後使其中乙個指標指向鍊錶中間,這裡可以使用另乙個指標快速移動,當另乙個指標移動速度是前一根指標的一倍時,就可以使slow指標到一半,而fast指標遍歷完了。使用...

32 回文鍊錶

解析 1.利用棧求解 首先遍歷鍊錶獲取鍊錶的長度len 根據鍊錶的長度,將鍊錶的前半部分壓入棧,將後半部分依次與彈棧的元素比較看是否一致,一致則為回文鍊錶 這裡注意的是鍊錶的後半部分的開始位置 鍊錶長度的奇偶 public boolean ispalindrome1 listnode head 前半...

234 回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?正確思路是1.先找到鍊錶的中點 通過快慢雙指標,快指標一次移動兩個單位,慢指標一次移動乙個單位,當快指標頂到頭的時...