image.png

快慢指针

image.png

  1. func hasCycle(head *ListNode) bool {
  2. if head==nil||head.Next==nil {
  3. return false
  4. }
  5. for head!=nil{
  6. if head.Val==1>>63 {
  7. return true
  8. }
  9. head.Val = 1>>63
  10. head = head.Next
  11. }
  12. return false
  13. }

image.png

map

func hasCycle2(head *ListNode) bool {
    if head==nil||head.Next==nil {
        return false
    }
    m :=make(map[uintptr]struct{})
    for head!=nil{
        if _,ok:=m[uintptr(unsafe.Pointer(head))];ok {
            return true
        }
        m[uintptr(unsafe.Pointer(head))] = struct{}{}
        head = head.Next
    }
    return false
}

image.png