Article From:https://www.cnblogs.com/strengthen/p/9968009.html

Given a linked list, return the node where the cycle begins. If there is no cycle, return `null`.

Note: Do not modify the linked list.

Can you solve it without using extra space?

Given a linked list, return the first node in which the list begins to enter the ring. If the list is not looped, return`null`

Note: Modification of a given linked list is not allowed.

Can you solve this problem without extra space?

``` 1 import Foundation
2
4
5     public class ListNode {
6
7         public var val: Int
8         public var next: ListNode?
9
10         public init(_ val: Int) {
11             self.val = val
12             self.next = nil
13         }
14     }
15
16     // Waiting to be judged.
17     func detectCycle(_ head: ListNode?) -> ListNode? {
21         while fast != nil && fast?.next != nil {
22             slow = slow?.next
23             fast = fast?.next?.next
24             if slow === fast {
25                 while slow !== head {
26                     h = h?.next
27                     slow = slow?.next
28                 }
29                 return h
30             }
31         }
32         return nil
33     }
34 }```