题解 | #判断链表中是否有环#

判断链表中是否有环

https://www.nowcoder.com/practice/650474f313294468a4ded3ce0f7898b9

使用双指针,如果链表中有环,那么一定没有指向nullptr的节点;设置两个指针,一个指针一次走一步,另一个指针一次走两步,如果链表有环,两个指针一定会相遇。

时间复杂度:o(n)

空间复杂度:o(1)

class Solution {
public:
    bool hasCycle(ListNode *head) {
        //特殊情况处理
        if (head == nullptr)
            return false;
        
        ListNode* pslow = head;
        ListNode* pfast = head;
	    //保证快的指针和它的下一个节点都有效
        while(pfast != nullptr && pfast->next != nullptr) {
            pslow = pslow->next; //走一步
            pfast = pfast->next->next; //走两步
            //如果有环,两个节点一定会相遇
            if (pslow == pfast)
                return true;
        }
        
        return false;
    }
};

刷题题解(c++) 文章被收录于专栏

算法题题解(c++)

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务