当前位置: 首页 > news >正文

网站建设不足之处网站seo案例

网站建设不足之处,网站seo案例,央企八大设计院,网站开发项目步骤leetcode链接https://leetcode.cn/problems/linked-list-cycle-ii/description/ 问题描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到…

leetcode链接https://leetcode.cn/problems/linked-list-cycle-ii/description/


问题描述 

  给定一个链表的头节点  head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。


示例1

输入:head = [3,2,0,-4], pos = 1
输出:返回索引为 1 的链表节点
解释:链表中有一个环,其尾部连接到第二个节点。


示例2

输入:head = [1,2], pos = 0
输出:返回索引为 0 的链表节点
解释:链表中有一个环,其尾部连接到第一个节点


思路

  这道题可以沿用上一个环形链表的思想(快慢指针法),上一篇文章中证明了如果链表中有环,那么 fast 指针与 slow 指针一定可以在环中相遇,而在有环链表中还有一个结论,那就是相遇节点与头节点每次都走一步,他们必然会在入环处相遇(证明在代码之后)。

  有了这个结论之后,这道题就很好解决了,我们只需要先判断链表是否有环(上一个环形链表算法题),如果没有环,那么就返回NULL;如果有环,那么找到相遇节点 interNode 之后,然后定义一个节点指针 pcur 指向头节点,如果 pcur 与 interNode 不相同,那么就让 pcur 与interNode 同时往后走,直到他们两相等为止,入环的第一个节点即为 pcur


代码1

 typedef struct ListNode ListNode;//相交结点ListNode* IntersectionNode(ListNode* head){ListNode* slow = head, * fast = head;while (fast && fast->next){slow = slow->next;fast = fast->next->next;if (slow == fast){return slow;}}return NULL;}//入环的第一个节点
struct ListNode *detectCycle(struct ListNode *head) 
{//先找相交节点ListNode* interNode = IntersectionNode(head);if (interNode == NULL){return NULL;}//相遇节点与首结点每次走一步可以在入环处相遇ListNode* pcur = head;while (pcur != interNode){interNode = interNode->next;pcur = pcur->next;}return interNode;
}

 代码2

  当然,上述代码还可以改进一下。不难发现,其实 fast 与 slow 相遇之后,interNode 就是 slow (fast 也可以),所以可以直接用 slow 来作为相遇节点。

typedef struct ListNode ListNode;
struct ListNode *detectCycle(struct ListNode *head) 
{ListNode* fast = head, *slow = head;while (fast && fast->next){slow = slow->next;fast = fast->next->next;if (fast == slow){//相遇了,说明有环ListNode* pcur = head;while (pcur != slow){//相遇节点与首结点每次走一步可以在入环处相遇pcur = pcur->next;slow = slow->next;}return slow;}}return NULL;
}

证明 

  这里将链表抽象为以下结构(假设fast一次走两步,slow一次走一步):

设头节点为H,入环的第一个节点为E,fast 与 slow 相遇节点为M,H 到 E 距离为 L,E 到 M 距离为 X,环的周长为 R,所以 E 到 M 的距离就是 R - X ,再假设 fast 与 slow 相遇之前,fast 已经在环内走了 n 圈了,所以在相遇之前, fast 所走过的路程为:L + nR + X;而 slow 所走过的路程为:L + X,为什么 slow 没有绕环呢,因为在 slow 进入环后,fast 与 slow 的距离是越来越近的,他们俩的最大距离就是环的距离,而他们之间的距离又是越来越近的,所以 fast 是会在 slow 进入环之后的一圈内必然是会追上 slow 的。

  由于 fast 一次走两步,slow 一次走一步,所以 fast 所走的路程是 slow 所成路程的两倍,所以有如下这个等式:

  L + nR + X  = 2 * (L +X)

移项就可以得到:

  nR = L + X    =>   L = nR - X    =>    L =  (n - 1)R + R - X

这个等式也就表明,当 slow 到达相遇节点 M 之后,再绕环走 n - 1 圈,头节点也就到达了与 E 相距 R - X 的节点处;此时,slow 回到相遇点,与 E 的距离也是 R - X。所以相遇节点与头节点每次都走一步,他们必然会在入环处相遇。

http://www.dtcms.com/a/399465.html

相关文章:

  • 卖网站赚钱吗做国外网站翻译中国小说赚钱
  • python爬虫--requests模块
  • kernel4.19 rk3568 buildroot perf 编译踩坑记录
  • Springboot实现WebSocket通信(一)
  • wordpress站点标题360免费自助建站
  • 网站开发前端设计二维码创意设计
  • 太原网站建设随州steam交易链接怎么改
  • 网站风格设计怎么写织梦搞笑图片网站源码
  • 网站建设 中企动力板材生态板跨境电商平台建设方案
  • STM32 单片机 - ADC
  • STM32_08_中断(☆☆☆)
  • 网站建设合优wordpress首页添加视频
  • todesk开启虚拟屏后被控黑屏
  • 学校网站建设的申请书推广100种方式
  • 瑞芯微RK3506核心板/开发板DSM音频开发实战,关键知识点与实操案例必看攻略!
  • 网站建设项目明细表网站建设讠金手指科杰
  • 美文的手机网站代理服务器地址怎么找
  • 自动化单mysql多实例库的全量迁移脚本
  • Lucene 8.7.0 版本中doc、tim、tip、tmd文件详解
  • golang1.18升级到1.23遇到的坑
  • 网站建设广告费 科目高埗网站仿做
  • 52Hz——FreeRTOS学习笔记——FReeRTOS移植遇到的问题
  • 网站建设肆金手指排名7全网通网站
  • AI赋能互联网广告变现的商业模式
  • 52Hz——FreeRTOS学习笔记——删除任务
  • AI 重塑教育生态:从个性化学习到公平鸿沟
  • 将二级域名 网站目录网站首页排名下降
  • 实现Word文档自动编号提取技术详解
  • 超越OCR:深入智能文档处理(IDP)的技术内核与实现路径
  • 江苏自助建站平台html5游戏开发