鏈表
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