day17:141. 环形链表、236. 二叉树的最近公共祖先、92. 反转链表 II
day17题目:141. 环形链表、236. 二叉树的最近公共祖先、92. 反转链表 II
学习计划链接:冲刺春招-精选笔面试 66 题大通关
今日知识点:快慢指针、dfs、链表,难度为简单、中等、中等
昨日题目链接:冲刺春招-精选笔面试 66 题大通关 day16
给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
如果链表中存在环 ,则返回 true 。 否则,返回 false 。
示例 1:
示例 2:
示例 3:
提示:
链表中节点的数目范围是
[0, 10^4]-10^5 <= Node.val <= 10^5pos为-1或者链表中的一个 有效索引 。
进阶: 你能用 O(1)(即,常量)内存解决此问题吗?
思路
快慢指针,快指针一次走两步,慢指针一次走一步,若有环则一定会遇上的,否则没有环
代码
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
示例 1:
示例 2:
示例 3:
提示:
树中节点数目在范围
[2, 10^5]内。-10^9 <= Node.val <= 10^9所有
Node.val互不相同。p != qp和q均存在于给定的二叉树中。
思路
先从一个节点往上走将沿途的vis置为true,再从另一个结点往上走,遇到vis为true的就是最近共同祖先,返回。
代码
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
示例 1:
示例 2:
提示:
链表中节点数目为
n1 <= n <= 500-500 <= Node.val <= 5001 <= left <= right <= n
进阶: 你可以使用一趟扫描完成反转吗?
思路
哎,先来一个反转链表的函数,day1的K组一个反转链表里边我们就写过:冲刺春招-精选笔面试 66 题大通关 day1
然后,当务之急是找到 left 和 right 对应的结点指针 l 和 r,以及 l 前面的 prev
翻转
let [s, e] = reverseList(l, r), 记得在之前先把r.next存到temp为了让反转后子链表能够顺利的拼回去原链表,需将反转后的
pre.next指向s,e.next指向temp
代码
最后更新于
这有帮助吗?