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:
[0, 300]
.-100 <= Node.val <= 100
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
}
}