leetcode刷題紀實(三)

2021-10-04 02:46:51 字數 1232 閱讀 1300

反轉乙個單鏈表。

class

solution

return cur;}}

;

比較常見的思路,利用雙指標,乙個在前,乙個在後,進行就地翻轉

如果說便於理解的話,其實還可以寫出一種三指標的就地翻轉格式,就不寫了

第二個方法:頭插法

class

solution

head=q;

return head;}}

;

第三種,遞迴法,理解一下

class

solution

listnode* ret =

reverselist

(head-

>next)

;

head-

>next-

>next = head;

head-

>next =

null

;return ret;}}

;

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

class

solution

int left =

0, right = record.

size()

-1;while

(left < right)

return

true;}

};

利用了乙個輔助陣列,這個肯定是最好想到了的

題目中問能不能限制一下時間和空間複雜度,思考一下

class

solution

//2、將slow之後鍊錶進行斷開且反轉,最後翻轉完成之後pre指向反轉鍊錶的頭節點

while

(slow)

//3、前後鍊錶進行比較,注意若為奇數鍊錶,後半部分回比前部分多1乙個節點,然而我們只比較相同長度的節點值,巧妙地避開這點判斷

while

(head&&pre)

return

true;}

};

快慢指標找到鍊錶的中點,然後翻轉後半段再進行判斷,very very nice

class

solution

};

很簡單的乙個題,但是感覺題目描述有點問題,迷茫

leetcode刷題紀實(四)

給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。class solution return slow 這是快慢指標的經典解法,通過快慢指標移動速度的不同,來尋找到鍊錶的中間結點,而最好的速度比為2 1,這樣就可以使得當快指標到達鍊錶尾的時候,...

LeetCode刷題 動態規劃(三)

最長公共子串行問題,最基本的問題是在兩個字串中找出最長公共字串。方法是使用雙指標 i,j遍歷兩個字串,建立二維 dp 陣列,通過填表獲得結果。1143,最長公共子串行,medium 583,兩個字串的刪除操作,medium 712,兩個字串的最小ascii刪除和,medium 1143,最長公共子串...

leetcode刷題(22) 15 三數之和

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0 1 1,1,2 class solu...