你不知道的环形链表 😊😊??
每博一文案
有人说,当你有一肚子的心里话,想要找个人倾诉的时候,
你一定要找真正懂你的人,因为不是所有人都会在乎你说的话。
愿意陪你,谈笑的人很多,但能倾听你心事的人很少,有些话只能
给懂的人听,和不懂自己的人,说再多也换不来一句关心。
快乐分享错了人,就成了显摆,
难过分享错了人,就成了侨情,
和懂你的人,倾诉,无需多言,他自懂你的委屈待遇,
不懂你的人,你的委屈和难过,对他来说就是轻描淡写,是过眼云烟
你说的再多,也只是无济于事,就像作家独木舟说的那样,
世界上其实根本就没有感同身受,这回事,
针不是刺到别人身上,他们就不知道有多痛。
—————————————— 一禅心灵庙语
- 这是 力扣上的一道非常有意思的题目: 🔜🔜🔜 141. 环形链表 - 力扣(LeetCode)
- 同样的解决该问题的方法也是十分有意思的:
- 使用一个二倍速的指针,如果存在环 的话,这个快的二倍速指针 就会追上(相遇到)那个 慢 的指针
- 解决代码如下:
bool hasCycle(struct ListNode* head)
{
if (NULL == head)
{
return false;
}
struct ListNode* slow = head; // 慢指针
struct ListNode* falst = head; // 快指针(二倍速)
while (falst && falst->next) // NULL != falst && NULL != falst->next
{
slow = slow->next; // 一次走一步
falst = falst->next->next; // 一次走两步
if (falst == slow) // 两指针相遇了,说明,该链表存在环
{
return true; // 返回 true
}
}
return false; // 跳出循环了,链表走尽了,说明不存在环,返回 false
}
- 如果一定存在环的情况下: slow 一次走 一步,falst 一次走 两步,它们俩一定会相遇吗?
答,存在环的情况下: slow 一次走 一步,falst 一次走 两步 是一定会相遇的,
当 slow 进环以后,falst 正式开始追 slow 了,这里假设,falst 和 slow 之间的距离是 N ,那么在追的过程中,他们之间的距离变化是如下的:
- 同样如果一定存在环的情况下: slow 每次走 一步,falst 每次走 三步,呢还会相遇吗 ??
答,slow 每次走 一步,falst 每次走 三步,就不一定会相遇了,有可能是永远错过不会相遇的
当 slow 进环以后,falst 正式开始追 slow 了,这里假设,falst 和 slow 之间的距离是 N ,那么在追的过程中,他们之间的距离变化是如下的
- 同样如果一定存在环的情况下: slow 每次走 一步,falst 每次走 四 步,呢还会相遇吗 ??
答,slow 每次走 一步,falst 每次走 四 步,就不一定会相遇了,有可能是永远错过不会相遇的
当 slow 进环以后,falst 正式开始追 slow 了,这里假设,falst 和 slow 之间的距离是 N ,那么在追的过程中,他们之间的距离变化是如下的
最后:
限于自身水平,其中存在的错误,希望大家给予指教,韩信点兵——多多益善,谢谢大家!后会有期,江湖再见!