判断链表是否含有环

  • 题目描述

给定一个链表,确定它是否含有一个循环。
要求空间复杂度:O(1)

  • 解题思路
    设置一个慢指针和一个快指针,两个指针初始位置一样,快指针一次走两步,慢指针一次走一步。如果链表有环,快指针一定能追上慢指针。

  • 链表节点定义
struct ListNode
{
    int val;
    ListNode *next;
    ListNode(int x): val(x), next(NULL){}
};
  • 代码
bool hasCycle(ListNode *head)
{
    if(head == NULL)    
        return false;
    ListNode *slow = head;  //慢指针,一次走一步
    ListNode *fast = head;  //快指针,一次走两步
    // 如果有环,快指针一定能追上慢指针
    while(fast->next != NULL && fast->next->next != NULL)
    {
        slow = slow->next;
        fast = fast->next->next;
        if(slow == fast)    
            return true;
    }
    return false;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 搞懂单链表常见面试题 Hello 继上次的 搞懂基本排序算法,这个一星期,我总结了,我所学习和思考的单链表基础知识...
    醒着的码者阅读 10,051评论 1 45
  • 【声明】欢迎转载,但请保留文章原始出处→_→文章来源:http://www.jianshu.com/p/08d08...
    梦工厂阅读 9,143评论 3 31
  • (一)LeetCode206.反转链表 题目描述: 反转一个单链表。 代码实现 (二)LeetCode160. 相...
    Jarily阅读 5,216评论 0 5
  • 1.打印两个有序链表的公共部分 【题目】给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。例...
    Miss_麦兜阅读 4,231评论 0 1
  • 作者:者苏 子为王,母为虏! 终日舂,薄暮常与死相伍! 相隔三千里,谁当使告汝! 如泣如诉的歌声飘荡在皇宫偏角的一...
    者苏单阅读 3,971评论 0 0