LeetCode142. Linked List Cycle II

文章目录

一、题目

Given the head of a linked list, return the node where the cycle begins. If there is no cycle, return null.

There is a cycle in a linked list if there is some node in the list that can be reached again by continuously following the next pointer. Internally, pos is used to denote the index of the node that tail's next pointer is connected to (0-indexed). It is -1 if there is no cycle. Note that pos is not passed as a parameter.

Do not modify the linked list.

Example 1:

Input: head = [3,2,0,-4], pos = 1

Output: tail connects to node index 1

Explanation: There is a cycle in the linked list, where tail connects to the second node.

Example 2:

Input: head = [1,2], pos = 0

Output: tail connects to node index 0

Explanation: There is a cycle in the linked list, where tail connects to the first node.

Example 3:

Input: head = [1], pos = -1

Output: no cycle

Explanation: There is no cycle in the linked list.

Constraints:

The number of the nodes in the list is in the range [0, 104].

-105 <= Node.val <= 105

pos is -1 or a valid index in the linked-list.

Follow up: Can you solve it using O(1) (i.e. constant) memory?

二、题解

cpp 复制代码
/**
 * 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) {
        ListNode* fast = head;
        ListNode* slow = head;
        while(fast && fast->next){
            fast = fast->next->next;
            slow = slow->next;
            if(fast == slow){
                ListNode* tmp1 = fast;
                ListNode* tmp2 = head;
                while(tmp1 != tmp2){
                    tmp1 = tmp1->next;
                    tmp2 = tmp2->next;
                }
                return tmp1;
            }
        }
        return NULL;
    }
};
相关推荐
实心儿儿2 分钟前
C++ —— 继承
开发语言·c++
AMoon丶8 分钟前
C++基础-类、对象
java·linux·服务器·c语言·开发语言·jvm·c++
17(无规则自律)20 分钟前
Leetcode第二题:用 C++ 解决字母异位词分组
c++·leetcode·哈希算法
样例过了就是过了21 分钟前
LeetCode热题100 子集
数据结构·c++·算法·leetcode·dfs
I_LPL26 分钟前
day52 代码随想录算法训练营 图论专题5
java·算法·图论·并查集
jing-ya29 分钟前
day 49 图论part1
算法·深度优先·图论
free-elcmacom34 分钟前
C++三种参数传递方式:从交换函数看值、指针与引用的区别
开发语言·c++
想吃火锅100537 分钟前
【leetcode】98.验证二叉搜索树
算法·leetcode·职场和发展
一叶落43838 分钟前
【LeetCode 172】阶乘后的零(C语言详解 | 数学规律 + 对数时间复杂度)
c语言·数据结构·算法·leetcode·动态规划
自信1504130575938 分钟前
数据结构初阶——二叉树之——堆的实现
c语言·数据结构·算法