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.

Follow up:
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, returnnull

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

Advance:
Can you solve this problem without extra space?


 1 import Foundation
 2 
 3 class LinkedListCycleII {
 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? {
18         var slow = head
19         var fast = head
20         var h = head
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 }

 

Leave a Reply

Your email address will not be published. Required fields are marked *