数据结构与算法之环形链表

环形链表

题目

给定一个链表,判断链表中是否有环。
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

示例 1:

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

输入:head = [1], pos = -1
输出:false
解释:链表中没有环。
链接:https://leetcode-cn.com/problems/linked-list-cycle

思路

快慢指针,快慢指针同时从头节点出发,快指针每次走两步,慢指针每次走一步,如果存在环的话,快指针迟早赶上慢指针。

源代码(C#)

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution 
{
    public bool HasCycle(ListNode head)
    {
            ListNode slow = head;
            ListNode fast = head;
            while (fast != null && fast.next != null)
            {
                slow = slow.next;
                fast = fast.next.next;
                if(slow == fast)
                {
                    return true;
                }
            }
            return false;
    }
}

结果

在这里插入图片描述

发布了15 篇原创文章 · 获赞 4 · 访问量 1646

猜你喜欢

转载自blog.csdn.net/Mr_Angier/article/details/104875611