算法與數據結構(LeetCode) —— 常見題目彙總及代碼實現

鏈表

 

1. 檢測鏈表中是否存在環

問題:給你一個鏈表,如何通過O(1)的空間複雜度檢測鏈表中是否存在環。

LeetCode地址https://leetcode.com/problems/linked-list-cycle/

解題思路:使用兩個指針slow和fast,slow每次向前走一步,fast每次向前走兩步,如果slow和fast相遇,則表明鏈表中有環,否則鏈表中沒有環。

代碼實現/src/main/java/leetcode/linkedlist/_141_LinkedListCycle.java

 

2. 反轉一個單鏈表

問題:反轉一個單鏈表

LeetCode地址https://leetcode.com/problems/reverse-linked-list/

解題思路:初始化兩個節點pre(前一個結點)和curr(當前結點),pre指向null,curr指向鏈表頭結點。遍歷鏈表,首先將鏈表頭節點指向pre,也就是指向null,之後pre和curr每次都向後移動一個結點,並將curr的next指針指向pre,直到遍歷完整個鏈表爲止。

代碼實現/src/main/java/leetcode/linkedlist/_206_ReverseLinkedList.java

 

3. 合併兩個有序鏈表

問題:合併兩個有序鏈表,並返回新鏈表。

LeetCode地址https://leetcode.com/problems/merge-two-sorted-lists/

解題思路:因爲兩個鏈表都是有序,所以我們只需要從鏈表的頭結點開始,依次在兩個鏈表中拿出一個結點l1和l2,並比較兩個結點值的大小,如果l1的值小於等於l2的值,那麼就把l1的next指針指向l2,否則就把l2的next指針指向l1。爲了實現O(1)的空間複雜度,推薦使用遞歸的方式。

代碼實現/src/main/java/leetcode/linkedlist/_21_MergeTwoSortedLists.java

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章