[路飞]_leetcode141.环形链表

121 阅读1分钟

题目

141.环形链表

给你一个链表的头节点 head ,判断链表中是否有环。有环返回true,否则返回false

数据结构:

class ListNode {
      val: number
      next: ListNode | null
      constructor(val?: number, next?: ListNode | null) {
          this.val = (val===undefined ? 0 : val)
          this.next = (next===undefined ? null : next)
      }
  }

思路:

我们可以想象在跑道赛跑,当有一个人快,一个人慢时,如果有环,两人在一段时间后会出现套圈相遇的情况,如果无环则不会相遇,速度快的人会率先到达终点。 由此思路,我们可以进行环形链表的判断。 需要创建,快、慢两个变量,代表两个人,null作为终点,两个指针是否相同作为有环条件。

代码

function hasCycle(head: ListNode | null): boolean {
    if(!head) return false;
    let slow = head,fast = head;
    while(fast && fast.next){
        slow = slow.next;
        fast = fast.next.next;
        if(fast===slow){
            return true;
        }
    }
    return false;
}