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

乱起封神是那个网站开发的华容县住房和城乡建设局网站

乱起封神是那个网站开发的,华容县住房和城乡建设局网站,fqapps com网站怎么做,唐朝网站目录 一.基本结构 二.判断一个单链表带不带环 三.2个问题 1.为什么 slow 走 1 步,fast 走 2 步,他们会相遇,会不会错过?请证明。 2.为什么 slow 走 1 步,fast 走 X 步 ( X > 3 ),他们会相遇&#x…

目录

一.基本结构

二.判断一个单链表带不带环

三.2个问题

1.为什么 slow 走 1 步,fast 走 2 步,他们会相遇,会不会错过?请证明。

2.为什么 slow 走 1 步,fast 走 X 步 ( X >= 3 ),他们会相遇,会不会错过?请证明。

四.找入环点

法1:结论

法2:转换为求交点


一.基本结构

           

由图可知,带环链表不能轻易遍例,否则很容易造成死循环

二.判断一个单链表带不带环

141. 环形链表 - 力扣(LeetCode)

思路:快慢指针
都从链表起始位置开始,fast 一次走2步,slow 一次走1步。
如果链表带环则一定会在环中相遇;如果不带环快指针率先走到链表的末尾。

/*Definition for singly-linked list.
struct ListNode
{int val;struct ListNode *next;
};*/bool hasCycle(struct ListNode *head)
{struct ListNode *fast, *slow;fast = slow = head;while (fast && fast->next){fast = fast->next->next;;slow = slow->next;if (fast == slow){return true;}}return false;
}

三.2个问题

1.为什么 slow 走 1 步,fast 走 2 步,他们会相遇,会不会错过?请证明。

假设链表带环,两个指针最后都会进入环,fast 先进环,slow 后进环。当 fast 到入环第一个节点时,slow 走一半。

假设 slow 进环之后, fast 和 slow 间的距离是 N。fast 开始追击,每次距离减少1。

fast 和 slow 间的距离:N,N-1,N-2,……,2,1,0
当距离为 0 时就追上。

2.为什么 slow 走 1 步,fast 走 X 步 ( X >= 3 ),他们会相遇,会不会错过?请证明。

假设 slow 进环之后, fast 和 slow 间的距离是 N。环的周长是 C
slow 进环之后,fast 开始追击。slow 走1步,fast 走3步。距离每次减 2

fast 和 slow 间的距离:
N偶数:N,N-2,N-4,……,4,2,0  ——  结束
N奇数:N,N-2,N-4,……,5,3,1,-1  ——  距离变成 C-1,相当于开启新一轮追击。

若 C-1 是偶数:
fast 和 slow 间的距离:C-1,C-3,……,4,2,0  ——  结束

若 C-1 是奇数:
fast 和 slow 间的距离:C-1,C-3,……,5,3,1,-1  ——  距离变成 C-1,又开启新一轮追击。永远追不上。

四.找入环点

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 NULL
142. 环形链表 II - 力扣(LeetCode)

法1:结论

结论:一个指针从相遇点走,另一个从起始点走,每次走1步,会在入环点相遇
证明:

假设:
起始点 - 入环点距离:L
入环点 - 相遇点距离:X ( 0 <= X < C )
环的长度:C

注意:slow 进环,fast 追上 slow 时,slow 还没走满1圈
证明:slow进环后,如果slow走一圈,fast就走了两圈及以上。它们的路程差是一圈,但是它们距离差不可能大于一圈,所以肯定会相遇

slow 走的距离:L + X
fast 走的距离:L + n*C + X( fast 从自己入环到追上 slow 期间,在环里转了 n 圈)( n >= 1)

fast 走的距离是 slow 的2倍
2 * ( L + X ) = L + n*C + X
化简:
L = n * C - X     或     L = ( n -1 ) * C + C - X

得证。

/*Definition for singly-linked list.
struct ListNode
{int val;struct ListNode *next;
};*/struct ListNode *detectCycle(struct ListNode *head)
{struct ListNode *fast, *slow;fast = slow = head;while (fast && fast->next){fast = fast->next->next;slow = slow->next;if (slow == fast){struct ListNode *meet = slow;struct ListNode *start = head;while (meet != start){meet = meet->next;start = start->next;}return meet;}}return NULL;
}

法2:转换为求交点

相遇点与其下一个节点之间的链接断开
找入环点转化为求链表的交点

/*Definition for singly-linked list.
struct ListNode
{int val;struct ListNode *next;
};*/struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB)
{struct ListNode *curA = headA, *curB = headB;struct ListNode *tailA = headA, *tailB = headB;int numA = 1, numB = 1, num = 0; // 遍例链表过程中分别记录2个链表的长度while (tailA->next){tailA = tailA->next;numA++;}while (tailB->next){tailB = tailB->next;numB++;}if (tailA != tailB) // 判断是否有公共节点(本题中这一步可以省略)return NULL;if (numA > numB) // 让长的链表先走 两链表长度之差 步{num = numA - numB;while (num--){curA = curA->next;}}else{num = numB - numA;while (num--){curB = curB->next;}}while (curA != curB) // 从短链表位置起遍例,找地址相同的节点,即为交点{curA = curA->next;curB = curB->next;}return curA;
}struct ListNode *detectCycle(struct ListNode *head)
{struct ListNode *fast, *slow;fast = slow = head;while (fast && fast->next){fast = fast->next->next;slow = slow->next;if (slow == fast){// 转化为求 lt1  lt2 的交点struct ListNode *meet = slow;struct ListNode *lt1 = head;struct ListNode *lt2 = meet->next;meet->next = NULL;return getIntersectionNode(lt1, lt2);}}return NULL;
}

meet 指针断开不会影响 getIntersectionNode(lt1, lt2);中 meet 指针的链接。
因为找交点的思路是:
1.判断是否有公共节点(本题中这一步可以省略),遍例链表过程中分别记录2个链表的长度
2.让长的链表先走 两链表长度之差 步
3.从短链表位置起遍例,找地址相同的节点,即为交点

本篇的分享就到这里了,感谢观看,如果对你有帮助,别忘了点赞+收藏+关注
小编会以自己学习过程中遇到的问题为素材,持续为您推送文章


文章转载自:

http://qrYTfB1B.wxrbL.cn
http://LQADr85g.wxrbL.cn
http://4xInZi5E.wxrbL.cn
http://NeIYvVzr.wxrbL.cn
http://YhrG5xTn.wxrbL.cn
http://Vl7A3lJj.wxrbL.cn
http://anykbG4Z.wxrbL.cn
http://dAk8tgOw.wxrbL.cn
http://aITj4xnO.wxrbL.cn
http://6zEbZg33.wxrbL.cn
http://UrZcv5Hp.wxrbL.cn
http://KRhFqt64.wxrbL.cn
http://EXD04fFB.wxrbL.cn
http://xIHp3Yuk.wxrbL.cn
http://D9GUwXJp.wxrbL.cn
http://OlFcOlXq.wxrbL.cn
http://UD9Pl1vZ.wxrbL.cn
http://0pHKIlxc.wxrbL.cn
http://Q47k3Y5X.wxrbL.cn
http://gMjmmFUs.wxrbL.cn
http://ECHGfV9b.wxrbL.cn
http://ugwGKuzL.wxrbL.cn
http://jPrE1jpL.wxrbL.cn
http://L9anpAEU.wxrbL.cn
http://h831TRvL.wxrbL.cn
http://nFJwTjqj.wxrbL.cn
http://c0Uv9u54.wxrbL.cn
http://e0n5d3r8.wxrbL.cn
http://aTkCnqr3.wxrbL.cn
http://5kaMuPFi.wxrbL.cn
http://www.dtcms.com/wzjs/756077.html

相关文章:

  • 移动互联网网站开发wordpress 开发 电商
  • 网站建设基本流程微信建微网站
  • 淘宝的网站建设的目标帮一个企业做网站流程
  • phpmysql旅游网站开发贵阳网站建设推广
  • 网站开发项目意义帝国建站程序
  • wordpress网站下载文件WordPress怎么做CMS
  • 徐州手机网站制作公司戴尔公司网站建设的特点是什么
  • 怎么做免流网站网站title写法
  • 数据库网站宝山网站建设推广
  • 安顺市住房与城乡建设局网站wordpress百度主动推送
  • 微信小程序外联网站做百度网站接到多少客户电话号码
  • 哈尔滨定制网站建设奇迹网站自己做
  • 吴忠网站建设企点qq售卖平台
  • 电子商务企业网站有哪些win8风格wordpress博客主题
  • 石家庄网站建设技术支持网站开发命名规则
  • sqlite做网站网站建设周记
  • 潍坊市企业网站建设做外国订单有什么网站
  • 承德市网站开发制作一个简单的网站
  • 风景名胜区建设部网站html底部的版权代码
  • 网站建设需求报价明细网页版梦幻西游贴吧
  • 开发app学什么编程语言珠海百度关键词优化
  • 分类网站有哪些ppt模板百度网盘
  • 服装企业官方网站网络组建考试题
  • 网站建设 中小企业wordpress store
  • 塘厦基础网站建设做网站找那个公司
  • 网站后台管理系统论文商务网站规划与建设课设的项目需求
  • 棋牌游戏网站怎么做的专业专题网站建设
  • 打渔网站建设如何注册一家公司
  • 网站栏目规划汽车推广方式有哪些
  • 网站一键备案网络公司的名字