DEV Community

Christopher Coffee
Christopher Coffee

Posted on

Leetcode: Linked List Cycle (Kotlin)

This is an easy Leetcode LinkedList question. I will go over my thought process for solving this. For this, we will use Floyd’s Cycle Detection algorithm.
Linked List Cycle - LeetCode

Brainstorm

  1. Define two pointers — slow and fast. Initialize both of them to the head of the linked list.

  2. Move the slow pointer one step at a time and the fast pointer two steps at a time.

  3. At each step, check if slow and fast pointers are equal. If they are equal at some point, then a cycle exists in the linked list.

  4. If the fast pointer reaches the end of the list (i.e., it becomes null), then there is no cycle in the list.

Solution

/**
 * Example:
 * var li = ListNode(5)
 * var v = li.`val`
 * Definition for singly-linked list.
 * class ListNode(var `val`: Int) {
 *     var next: ListNode? = null
 * }
 */

class Solution {
    fun hasCycle(head: ListNode?): Boolean {
       var slow = head
       var fast = head

       while(fast != null && fast.next != null){
           slow = slow?.next
           fast = fast?.next?.next

           if(slow == fast){
               return true
           }
       }

       return false
    }
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)