LeetCode in Kotlin

82. Remove Duplicates from Sorted List II

Medium

Given the head of a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list. Return the linked list sorted as well.

Example 1:

Input: head = [1,2,3,3,4,4,5]

Output: [1,2,5]

Example 2:

Input: head = [1,1,1,2,3]

Output: [2,3]

Constraints:

Solution

import com_github_leetcode.ListNode

/*
 * 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 deleteDuplicates(head: ListNode?): ListNode? {
        if (head == null || head.next == null) {
            return head
        }
        val dummy = ListNode(0)
        var prev: ListNode? = dummy
        prev!!.next = head
        var curr = head.next
        while (curr != null) {
            var flagFoundDuplicate = false
            while (curr != null && prev!!.next!!.`val` == curr.`val`) {
                flagFoundDuplicate = true
                curr = curr.next
            }
            if (flagFoundDuplicate) {
                prev!!.next = curr
                if (curr != null) {
                    curr = curr.next
                }
            } else {
                prev = prev!!.next
                prev!!.next = curr
                curr = curr!!.next
            }
        }
        return dummy.next
    }
}