Leecode之环形链表

一.题目及剖析

https://leetcode.cn/problems/linked-list-cycle/description/

Leecode之环形链表_第1张图片

这道题就是去判断一个链表是否带环,分两种情况,链表中只有一个元素则一定不带环,链表中有两个及以上的元素则要引入快慢指针

二.思路引入

设置两个快慢指针,快指针走2步,慢指针走1步(不论快慢指针怎么走,如果链表带环则两指针一定能相遇,只不过当两指针走的步数差为1时,相遇所用时间最短),当两指针相遇,则链表带环

三.代码引入

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
bool hasCycle(struct ListNode *head) {
    struct ListNode* slow, * fast;
    slow = fast = head;
    if(head == NULL || head->next == NULL)
    return false;
    while(fast && fast->next)
    {
        slow = slow->next;
        fast = fast->next->next;
        if(slow == fast)
        return true;
    }
    return false;
}

最好用这么一种方法,方便后面判断环的入口

你可能感兴趣的:(数据结构与算法题集,链表,数据结构)