7 回文鍊錶

2021-10-07 17:22:52 字數 762 閱讀 8374

使用快慢指標,當快指標到達表尾的時候,慢指標在鍊錶中部,將鍊錶的後半部分進行倒置,與前半部分進行比較,相等則為回文鍊錶。

鍊錶的倒置部分:例如1>2>3>4>3>2>1

相當於是pre

(前節點)>slow(當前節點)>next(下個節點)三個指標在鍊錶上滑動,開始的時候,slow指向4這個節點,pre 開始指向為null;

1、用新指標p儲存每一次slow的下個節點(p = slow -> next);

2、要實現鍊錶的反轉,就是要實現pre這個步驟,所以將slow指向pre(slow -> next = pre);

3、一次反轉完成後將指標向右滑動,pre = slow(slow成為了前節點);

4、slow = p(此時的p成為了當前節點);

迴圈以上步驟,直到slow = null,pre剛好指向鍊錶的最後乙個節點,實現了所有鍊錶的反轉。

bool ispalindrome(struct listnode* head) 

while(slow)

while(pre && head)

return true;

}

鍊錶反**

/*

* struct listnode ;

*/struct listnode* reverselist(struct listnode* phead )

return pre;

}

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