1

LeetCode 141.环形链表

大家好,我是灵魂画师--茄子。技术水平一般,喜欢画画。

开始今天的正题。

leetCode141环形链表

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

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

示例 1:

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

图解

示例 2:

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

图解

题解:

1.快慢指针解法

思路:

  1. 设置一个快指针,一个慢指针。
  2. 同时指向第一个节点。
  3. 每一次循环,慢指针走一步,快指针走两步。
  4. 如果快指针追上了慢指针,则代表链表有环,如果没追到快指针指向null则代表无环。
var hasCycle = function(head) {
    if (head == null || head.next == null) {
        return false;
    }
    let slow = head;
    let quick = head;
    while(quick && quick.next){
        slow = slow.next;
        quick = quick.next.next;
        if(slow == quick){
            return 1;
        }
    }
    return 0;
};

2.标记法

思路:

  1. 循环head,每次设置一个flag标记为true,如果再次循环到已经设置好标记的地方,则返回true;
  2. head每次前进一个节点。
  3. 如果没有head == null,则返回false。
var hasCycle = function(head) {
    while(head){
        if(head.flag){
            return true;
        }
        head.flag = true;
        head = head.next;
    }
    return false
};

以上就是我的思路以及解法了,希望大家喜欢我画的图解,我会继续努力的ヾ(◍°∇°◍)ノ゙。(点个赞把我带走吧~~)


灵魂画师_茄子
11 声望4 粉丝