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

Leetcode 141 Linked List Cycle and Leetcode 142 Linked List Cycle II

题目链接

https://leetcode.com/problems/linked-list-cycle/
https://leetcode.com/problems/linked-list-cycle-ii/

题意

给定一个环形链表,求找到链表的环的位置,返回一个指针(以Leetcode 142为例)

题解

首先判断是否有环。可以用快慢指针来确定,由于快的那个指针一直在环中移动,慢的指针每次移动一步,二者一定会相遇,如果能相遇则说明有环。第二步假设从链表头到环的起点距离为a,相遇点为c,那么一定满足a+c+kb = 2(a+c),则满足a+c = kb,也就是说如果一个指针从链表头开始,另一个指针从相遇点开始走,那么两者相遇的点就是环的起点。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        bool hasCycle = false;
        ListNode *p1 = head;
        ListNode *p2 = head;
        while (p1 != nullptr && p1->next != nullptr) {
            p1 = p1->next->next;
            p2 = p2->next;
            if(p1 == p2) {
                hasCycle = true;
                break;
            }
        }
        if(hasCycle) {
            ListNode *p3 = head;
            while( p1 != p3) {
                p1 = p1->next;
                p3 = p3->next;
            }
            return p1;
        } 
        return nullptr;
    }
};

时间复杂度: O ( n ) O(n) O(n) n是链表的长度
空间复杂度: O ( 1 ) O(1) O(1)


http://www.kler.cn/a/564505.html

相关文章:

  • 串口解析的服务器流程优化
  • Android构建系统 - 06 添加编译模块
  • 大湾区经济网报道:拉美电商交易额连续三年增速超35%
  • 每天一个Flutter开发小项目 (4) : 构建收藏地点应用 - 深入Flutter状态管理
  • 网络安全 机器学习算法 计算机网络安全机制
  • kafka-web管理工具cmak
  • 设备健康管理系统在制造业的深度应用探索
  • 3DCAPP系列:开目浏览器KMVue
  • DeepSeek 提示词:常见指令类型
  • CSS 日常开发常用属性总结
  • pytorch基础-比较矩阵是否相等
  • Java类中的this操作
  • 2025-02-27 学习记录--C/C++-PTA 7-30 字符串的冒泡排序
  • fastchat 支持llama3 harmbench PAIR攻击支持 llama3
  • Vue+Element UI table表格,数据展示错位(已解决)
  • Three.js包围盒
  • sqlmap:自动SQL注入和数据库接管工具
  • 线性回归 (Linear Regression)案例分析2
  • 0x02 js、Vue、Ajax
  • Hadoop简介