題目
示例 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.先找到鍊錶的中點 通過快慢雙指標,快指標一次移動兩個單位,慢指標一次移動乙個單位,當快指標頂到頭的時...