24. 兩兩交換鏈表中的節點
用虛擬頭結點,這樣會方便很多。
本題鏈表操作就比較復雜了,建議大家先看視頻,視頻里我講解了注意事項,為什么需要temp保存臨時節點。
題目鏈接/文章講解/視頻講解:https://programmercarl.com/0024.%E4%B8%A4%E4%B8%A4%E4%BA%A4%E6%8D%A2%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%9A%84%E8%8A%82%E7%82%B9.html
19.刪除鏈表的倒數第N個節點
雙指針的操作,要注意,刪除第N個節點,那么我們當前遍歷的指針一定要指向第N個節點的前一個節點,建議先看視頻。
本題沒有視頻講解,大家注意數值相同,不代表指針相同。
一、自己寫出來的但是時間復雜度和空間復雜度上都太復雜了一些:
二、代碼隨想錄給出的方法
就等于是先求出長度,直接把長的那一條拖動到和另一條一樣長的位置,然后開始比較。
注意:
1、可以直接默認相交后每一位都是相同的;
2、因為相交后每一位都是相同的,所以拖動到一樣的長度時,兩指針是可以共進退的
142.環形鏈表II
算是鏈表比較有難度的題目,需要多花點時間理解確定環和找環入口,建議先看視頻。
題目鏈接/文章講解/視頻講解:https://programmercarl.com/0142.%E7%8E%AF%E5%BD%A2%E9%93%BE%E8%A1%A8II.html
注意:1、這個快慢指針法的公式推演還是很有意思的,需要牢記;
2、當快指針的速度是慢指針的兩倍時,慢指針是一定會在繞第一圈環形鏈表時被趕上的。