![](https://img-blog.csdnimg.cn/20210712170808765.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode力扣指南
记录自己的刷题日常和思路分享
mifmolchao
这个作者很懒,什么都没留下…
展开
-
链表-Java-力扣142. 环形链表 II
1. 题目题目链接142. 环形链表 II2. 思路设置快慢指针,快指针一次走两步,慢指针一次走一步,当他们第一次相遇的时候,将快指针放到头部,然后快指针和慢指针同时一人走一步,然后相遇的节点就是入口位置。3. 代码/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x原创 2021-07-17 22:29:09 · 115 阅读 · 1 评论 -
链表-Java-力扣138. 复制带随机指针的链表
1. 题目题目链接138. 复制带随机指针的链表2. 思路使用hashmap存储旧的节点和新的节点,然后利用旧节点的指向关系去构建新的节点的指向关系。3. 代码/*// Definition for a Node.class Node { int val; Node next; Node random; public Node(int val) { this.val = val; this.next = null;原创 2021-07-16 21:38:28 · 138 阅读 · 0 评论 -
链表-Java-力扣109. 有序链表转换二叉搜索树
1. 题目题目链接109. 有序链表转换二叉搜索树2. 思路这道题挺有意思的,首先我们知道二叉搜索树的中序遍历为从小到大的,而且题目需要是构建一个平衡的二叉搜索树,并且给出了一个已经从小到大排序好的链表,因此我们需要每次从链表的中间出发,把中间的节点保存下来,然后作为根节点,左子树就是中间节点的左边部分链表重复上述过程,右子树就是中间节点右边链表重复上述过程,因此可以递归的处理。这里需要注意的是:每次都使用快慢指针找到链表中间的节点的前一个节点,这样方便操作。3. 代码/** * Defini原创 2021-07-16 20:45:09 · 125 阅读 · 0 评论 -
链表-Java-力扣61. 旋转链表
1. 题目题目链接61. 旋转链表2. 思路意思就是将最后的k个节点放到链表前面即可,如果k大于链表长度,取余数即可:3. 代码class Solution { public ListNode rotateRight(ListNode head, int k) { if (head == null || head.next == null) return head; // 先找到链表的长度 int len = 1; List原创 2021-07-13 22:06:33 · 76 阅读 · 0 评论 -
链表-Java-力扣706. 设计哈希映射
1. 题目题目链接706. 设计哈希映射2. 思路主要是利用ArrayList数组,保存自己写的类Map,里面有key和value,然后设置一个合理的长度BUCKETS,生成哈希函数的值,每次将key转换为hash值,然后使用Iterator遍历做删除,插入和查询操作即可。3. 代码class MyHashMap { /** Initialize your data structure here. */ private class Map { public int原创 2021-07-13 21:28:09 · 153 阅读 · 0 评论 -
链表-Java-三指针-力扣24. 两两交换链表中的节点
1. 题目题目链接:24. 两两交换链表中的节点2. 思路使用三指针每次交换两个节点,然后将三个节点依次向前移动两次,注意边界条件即可。3. 代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } *原创 2021-07-13 21:21:42 · 90 阅读 · 0 评论 -
链表-双指针-力扣705. 设计哈希集合
1. 题目题目链接:705. 设计哈希集合2. 思路定义一个链表,初始化HashSet的时候就初始化一个头结点,然后先写contains函数,添加时先判断是否有数据,没有就直接添加在头结点后面,删除时先判断是否存在,存在就使用双指针删除。3. 代码class MyHashSet { /** Initialize your data structure here. */ ListNode head; public MyHashSet() { head = n原创 2021-07-12 22:12:33 · 70 阅读 · 0 评论 -
链表-双指针-力扣1290. 二进制链表转整数
1. 题目题目链接1290. 二进制链表转整数2. 思路2.1 菜鸡思路刚开始是遍历一次链表,取得链表节点的数量,然后把这个数量作为二进制转换十进制的次方数。代码如下3.1所示。2.2 大佬思路不用获取链表长度,在遍历的过程中计算结果,因为每次读到的一个值可以看成是二进制串的最低位,然后将原来的结果×2在加上当前值即可。3. 代码3.1 菜鸡思路class Solution { public int getDecimalValue(ListNode head) {原创 2021-07-12 21:27:45 · 83 阅读 · 0 评论 -
链表-双指针-力扣19. 删除链表的倒数第 N 个结点
1. 题目题目链接: 19. 删除链表的倒数第 N 个结点.2. 思路双指针:定义两个指针,fast和slow,先让fast向前移动N次,然后再一起移动到fast为最后一个节点,此时slow在被删除的倒数第N个节点的前一个节点,只需要slow.next = slow.next.next即可。当被删除的是head的时候,即N与链表的节点数量一样的时候,此时移动完成后,fast已经为null,因此只需要将head向后移动一次即可,即head = head.next;3. 代码class So原创 2021-07-12 17:22:52 · 87 阅读 · 0 评论