📑 题目:141. 环形链表

🚀 本题 LeetCode 传送门

题目大意

判断链表是否有环,不能使用额外的空间。

解题思路

给 2 个指针,一个指针是另外一个指针的下一个指针。快指针一次走 2 格,慢指针一次走 1 格。如果存在环,那么前一个指针一定会经过若干圈之后追上慢的指针。

代码

  1. package leetcode
  2. import (
  3. ""github.com/halfrost/LeetCode-Go/structures""
  4. )
  5. // ListNode define
  6. type ListNode = structures.ListNode
  7. /**
  8. * Definition for singly-linked list.
  9. * type ListNode struct {
  10. * Val int
  11. * Next *ListNode
  12. * }
  13. */
  14. func hasCycle(head *ListNode) bool {
  15. fast := head
  16. slow := head
  17. for fast != nil && fast.Next != nil {
  18. fast = fast.Next.Next
  19. slow = slow.Next
  20. if fast == slow {
  21. return true
  22. }
  23. }
  24. return false
  25. }