算法与数据结构(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

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