题目描述

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

解题思路

15、环形链表 - 图1

  • 两个人在环形跑道上的同一起点同时起跑, 一直跑下去, 速度快的人总会超过速度慢的人一圈
  • 用一快一慢两个指针遍历链表, 如果指针能够相逢, 那么该链表有环, 返回true, 遍历结束后还没有相逢就返回false

代码实现

  1. /**
  2. * Definition for singly-linked list.
  3. * function ListNode(val) {
  4. * this.val = val;
  5. * this.next = null;
  6. * }
  7. */
  8. /**
  9. * @param {ListNode} head
  10. * @return {boolean}
  11. */
  12. var hasCycle = function (head) {
  13. let p1 = head // 慢指针
  14. let p2 = head // 快指针
  15. while (p1 && p2 && p2.next) {
  16. p1 = p1.next
  17. p2 = p2.next.next
  18. if (p1 === p2) {
  19. return true
  20. }
  21. }
  22. return false
  23. }