1.链表有无环

采用快慢指针求解,指针slow和fast从链表头开始走,slow每次往后走一步,fast每次往后走两步,若链表有环则俩指针必定在环内相遇

2.有环链表长度

如图所示,假设slow和fast在Pos处第一次相遇,join为环的入口,假设从表头Head到Join有l个节点,join沿逆时针到Pos有x个节点,环中有R个节点,显然fast走过的节点数是slow的两倍,那么有

                  (1)

其中为一任意正整数,可以推出

                           (2)

让fast和slow从Pos开始继续沿着逆时针走,同时用另外个指针p沿着Head一次走一步,到第二次相遇时fast比slow多走了一圈,而fast的速度刚好是slow的两倍,则slow刚好走了一圈,记下此时slow走过的节点数可以得到环内包含的节点数,根据(2)可以得到,若slow从Pos走过 时刚好到达Join而此时p也刚好到达Join,记录下此时head走过的节点数,则链表的长度为

代码

struct Node {int data;Node* next;
};Node* IsCycle(Node *head)
{Node* slow = head;Node* fast = head;while (true) {if (fast == nullptr || slow == nullptr) {return nullptr;}slow = slow->next;fast = fast->next;if (fast == nullptr) {return nullptr;}fast = fast->next;if (fast == slow) {return fast;}}
}int LenList(Node* head)
{Node* Pos = IsCycle(head);if (Pos == nullptr) {return LenNonCycle(head);}int l = 0;int r = 0;bool rget = false;bool lget = false;Node* slow = Pos;Node* fast = Pos;Node* p = head;while(true) {slow = slow->next;if (!rget) {++r;}if (!lget) {++l;}fast = fast->next->next;if (fast == slow) {rget = true;}if (slow == p) {lget == true;}if (rget && lget) {return r + l;}}
}

leetcode每日一题链表有环无环链表长度求解相关推荐

  1. Leetcode每日一题:147.insertion-sort-list(对链表进行插入排序)

    思路:因为链表的特性,插入排序无法从当前元素往前遍历,所以这里直接从头开始查找插入位置,分头部插入.中间插入和尾部插入: ListNode *insertionSortList(ListNode *h ...

  2. Leetcode每日一题:328.odd-even-linked-list(奇偶链表)

    思路:同时分两个子链表分别向后连接属于它们的节点,遇到NULL节点时将两者连接即可: class Solution {public:ListNode *oddEvenList(ListNode *he ...

  3. Leetcode每日一题:83.remove-duplicates-from-sorted-list(删除排序链表中的重复元素)

    思路:两个指针pre和cur,用cur遍历链表,pre指向cur前面的非重复元素: class Solution {public:ListNode *deleteDuplicates(ListNode ...

  4. Leetcode每日一题:剑指offer22.lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof(链表中倒数第k个节点)

    思路:同上一道题,快慢指针问题: /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *nex ...

  5. 【LeetCode每日一题】——109.有序链表转换二叉搜索树

    文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...

  6. LeetCode 每日一题 3. 无重复字符的最长子串

    LeetCode 每日一题 3. 无重复字符的最长子串   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客 本文原创 ...

  7. Leetcode每日一题——思路小记

    文章目录 LeetCode每日一题 golang T15 2020.6.12 三数之和,双指针的运用 T70 2020.6.13 斐波那契数列 T1014 2020.6.17 最佳观光:双指针,计算公 ...

  8. leetcode每日刷题计划-简单篇day8

    leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...

  9. 【LeetCode每日一题】810. 黑板异或游戏

    [LeetCode每日一题]810. 黑板异或游戏 题目: 黑板上写着一个非负整数数组 nums[i] .Alice 和 Bob 轮流从黑板上擦掉一个数字,Alice 先手.如果擦除一个数字后,剩余的 ...

  10. 【Leetcode每日一题】118. 杨辉三角(水题)

    Leetcode每日一题 题目链接: 118. 杨辉三角 难度: 简单 解题思路: 无.见代码. 题解: class Solution:def generate(self, numRows: int) ...

最新文章

  1. 项目进度,你汇报清楚了么?
  2. 四川300家旅游企业将用上阿里云
  3. 央企名录、央企排名——国务院国有资产监督管理委员会央企名录
  4. Activiti最全入门教程
  5. SpringBoot(入门)
  6. html下移,jQuery实现元素的上移下移删除
  7. 监控系统选型,这篇不可不读
  8. 10g手动创建数据库
  9. 微信端php 开发技术要求,PHP微信开发技术 - WebFalse文档托管平台
  10. 如何应用大数据分析平台
  11. STM32F7 SAI驱动
  12. 传输层协议、应用层协议
  13. 基于51单片机制作的基础四轮蓝牙小车(含代码)
  14. 抽象类和接口的异同点
  15. 2022-2027中国内科缝合线行业应用形势与需求前景预测报告
  16. design pattern scard
  17. 计算机网络-cisco选择题
  18. C语言编程判断输入的英文字母是星期几
  19. 闫令琪:Games101 现代计算机图形学-光线追踪(三):渲染方程和路径追踪path ray tracing 作业Assignment07解析
  20. w7电脑蓝屏怎么解决_教您电脑蓝屏怎么办

热门文章

  1. Weibo LBS 15年定位分析和要做的事情
  2. python用法技巧_Python使用小技巧
  3. AMC数学竞赛报名时间、参赛对象、奖项等信息大全
  4. 8岁学编程,入行近40年,我总结了15条程序员经验宝典”
  5. 2017滴滴校园招聘笔试编程题2--餐饮利润最大
  6. 【WEB前端】CSS书写规范
  7. PHP函数库(other)
  8. Leetcode 443. 压缩字符串(C++ 模拟)
  9. 苹果微信聊天记录如何迁移到新手机?记住这4个步骤
  10. 2022年湖北安全员B证考试题库哪里有呢?甘建二有