一起刷题
文章平均质量分 87
Kom19
多多重复 百练成钢
展开
-
Day3.链表/哈希表(环形链表 II、有效的字母异位词、两个数组的交集、快乐数)
为什么一定要将快指针设计成每次走两个步长,慢指针每次走一个步长呢,因为这样设计的话,那么慢指针进入到环中,两个指针会一直在圈里面转,那么快指针一定会在环里面追上慢指针并且和慢指针相遇,因为快指针每次走两个步长,慢指针每次走一个步长,那么以慢指针为参考系,快指针就是相对于自己每次走一个步长,那么两个指针一定会相遇。我们画一个图就可以很好的证明,假设我们将这个环铺开成一条直线,那么由于步长不同,那么在相同的时间里面,快指针走的路程是慢指针的两倍。我们首先要知道快指针在慢指针走的第一圈里面就可以和慢指针相遇。原创 2023-03-17 12:07:53 · 151 阅读 · 0 评论 -
【刷题日记】Day2.链表(合并两个有序链表、链表相交、删除链表的倒数第 N 个结点)
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的题解:这题我们使用迭代的思想来解决这道题目我们的目标是合并以后这个链表仍然是升序排列的,那么我们的思路就是先创建一个虚拟头节点,然后不断地对两个链表的节点进行比较,哪一个更小就添加到新的链表中去所以代码的思路就是使用while循环来同时遍历两个链表,当某一个链表遍历完了那么循环也就结束了。原创 2023-03-16 11:55:38 · 108 阅读 · 0 评论 -
【刷题日志】Day1.链表(设计链表、反转链表、两两交换链表)
addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。然后prev来到了原来cur的位置,同时要想cur向后移动一个节点的话就需要一个临时指针保存cur的后一个节点的位置。由于我们使用了一个虚拟头节点所以我们的 i 应该写成 = index 这样我们才能找到对应的节点。如果索引无效,则返回-1。反转链表的核心在于遍历链表的同时不断的修改每个节点的指向,直到我们的链表遍历结束。我画了一个图来模拟完成反转链表的过程,使用两个指针来不断的修改节点的指向。原创 2023-03-14 21:53:18 · 93 阅读 · 0 评论 -
【Java】利用双指针解决十道经典的链表面试题(图文详解)
有以下几道经典的题目1.删除链表中等于给定值 val 的所有节点2.反转一个单链表3.给定一个带有头结点 head 的非空单链表,返回链表的中间结点4.输入一个链表,输出该链表中倒数第k个结点5.将两个有序链表合并为一个新的有序链表并返回6.以给定值x为基准将链表分割成两部分7.链表的回文结构8.输入两个链表,找出它们的第一个公共结点9.给定一个链表,判断链表中是否有环10.给定一个链表,返回链表开始入环的第一节点原创 2022-09-21 17:37:32 · 954 阅读 · 0 评论 -
双指针解决移除数组元素的问题
给你一个的数组nums,请你删除重复出现的元素,使每个元素,返回删除后数组的新长度。元素的应该保持我们的解题思路是利用双指针来解决这个问题我们定义两个变量一个P,一个Q我们令P指向数组的第一个元素,令Q指向数组的第二个元素那么当两个元素相等的时候我们令Q指针向后移动一位而P指针不动当两个元素不相等的时候我们令此时的Q指针指向的元素等于P+1指针所指向的位置复制完毕以后我们移动向前移动P的位置我们用图来解释就是这样的我们同时用P来计数,由于此时P指向4,同时我们让P的值也变成4。原创 2022-09-14 10:50:56 · 554 阅读 · 0 评论