【LeetCode】141. 环形链表

链表环检测
本文介绍了一种使用双指针技术来判断链表中是否存在环的有效方法。通过快慢两个指针在链表中移动,如果存在环,快指针最终会追上慢指针。这种方法不需要额外的空间,是一种高效解决方案。

题目链接https://leetcode-cn.com/problems/linked-list-cycle/description/

题目描述

给定一个链表,判断链表中是否有环。

进阶
你能否不使用额外空间解决此题?

解决方法

用双指针

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
// class Solution {
// public:
//     bool hasCycle(ListNode *head) {
//         //方法1,自己想的方法
//         if (!head) return false;
//         int k=10000;
//         while(head && k--){
//             head=head->next;
//         }
//         if (k==-1) return true;
//         else return false;
//     }
// };

class Solution {
public:
    bool hasCycle(ListNode *head) {
        //方法2,参考的方法
        ListNode *slow=head, *fast=head;
        while(fast && fast->next){
            slow=slow->next;
            fast=fast->next->next;
            if (slow==fast) //只要有环,那么fast与slow一定会撞上的
                return true;
        }
        return false;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值