C++实现LeetCode(141.单链表中的环)

 更新时间:2021年07月22日 16:23:22   作者:Grandyang  
这篇文章主要介绍了C++实现LeetCode(141.单链表中的环),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

[LeetCode] 141. Linked List Cycle 单链表中的环

Given a linked list, determine if it has a cycle in it.

To represent a cycle in the given linked list, we use an integer pos which represents the position (0-indexed) in the linked list where tail connects to. If pos is -1, then there is no cycle in the linked list.

Example 1:

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

Output: true

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: true
Explanation: There is a cycle in the linked list, where tail connects to the first node.

Example 3:

Input: head = [1], pos = -1
Output: false
Explanation: There is no cycle in the linked list.

Follow up:

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

这道题是快慢指针的经典应用。只需要设两个指针,一个每次走一步的慢指针和一个每次走两步的快指针,如果链表里有环的话,两个指针最终肯定会相遇。实在是太巧妙了,要是我肯定想不出来。代码如下:

C++ 解法:

class Solution {
public:
    bool hasCycle(ListNode *head) {
        ListNode *slow = head, *fast = head;
        while (fast && fast->next) {
            slow = slow->next;
            fast = fast->next->next;
            if (slow == fast) return true;
        }
        return false;
    }
};

Java 解法:

public class Solution {
    public boolean hasCycle(ListNode head) {
        ListNode slow = head, fast = head;
        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
            if (slow == fast) return true;
        }
        return false;
    }
}

Github 同步地址:

https://github.com/grandyang/leetcode/issues/141

类似题目:

Linked List Cycle II

Happy Number

参考资料:

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

https://leetcode.com/problems/linked-list-cycle/discuss/44489/O(1)-Space-Solution

到此这篇关于C++实现LeetCode(141.单链表中的环)的文章就介绍到这了,更多相关C++实现单链表中的环内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • linux根据pid获取进程名和获取进程pid(c语言获取pid)

    linux根据pid获取进程名和获取进程pid(c语言获取pid)

    status文件,第一行的Name即为进程名,C程序实现根据PID获取进程名和根据进程名获取PID,大家参考使用吧
    2013-12-12
  • opencv3/C++绘制几何图形实例

    opencv3/C++绘制几何图形实例

    今天小编就为大家分享一篇opencv3/C++绘制几何图形实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • C++ STL容器与函数谓词示例分析讲解

    C++ STL容器与函数谓词示例分析讲解

    这篇文章主要介绍了C++ STL容器与函数谓词示例,STL是“Standard Template Library”的缩写,中文译为“标准模板库”。STL是C++标准库的一部分,不用单独安装
    2022-11-11
  • C++ 数字的反转实现实例

    C++ 数字的反转实现实例

    这篇文章主要介绍了C++ 数字的反转实现实例的相关资料,需要的朋友可以参考下
    2017-06-06
  • OpenCV实现鼠标在图像上框选单目标和多目标

    OpenCV实现鼠标在图像上框选单目标和多目标

    这篇文章主要为大家详细介绍了OpenCV实现鼠标在图像上框选单目标和多目标,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • C语言中字符串的存储方法

    C语言中字符串的存储方法

    这篇文章主要为大家详细介绍了C语言中字符串的存储方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Gstreamer基础知识教程

    Gstreamer基础知识教程

    由于deepstream是基于gstreamer的,所以要想在deepstream上做拓展,需要对gstreamer有一定的认识,以下主要介绍Gstreamer整体框架和Gstreamer基础概念,需要的朋友可以参考下
    2022-07-07
  • c++中new一个结构体初始化过程

    c++中new一个结构体初始化过程

    这篇文章主要介绍了c++中new一个结构体初始化过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • c语言重要的字符串与内存函数

    c语言重要的字符串与内存函数

    这篇文章主要介绍一些c语言中常用字符串函数和内存函数的使用和注意事项,并且为了帮助读者理解和使用,也都模拟实现了他们的代码,需要的朋友可以参考一下
    2021-09-09
  • C++ EnterCriticalSection简单使用

    C++ EnterCriticalSection简单使用

    线程锁在多线程中可以控制线程的执行顺序,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08

最新评论