使用kotlin解决这个题目:83. 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例 1: 输入:head = [1,1,2] 输出:[1,2] 示例 2: 输入:head = [1,1,2,3,3] 输出:[1,2,3] 提示: 链表中节点数目在范围 [0, 300] 内 -100 <= Node.val <= 100 题目数据保证链表已经按升序 排列 通过次数577,197提交次数1,086,875
时间: 2024-01-16 22:03:48 浏览: 84
可以使用双指针法解决这个问题,算法的时间复杂度为 O(n),其中 n 是链表的长度。
具体的实现步骤如下:
1. 定义两个指针 prev 和 curr 分别指向链表的头节点 head,即 prev = head,curr = head.next。
2. 如果 curr 节点的值等于 prev 节点的值,说明 curr 节点是重复节点,将 prev 节点的 next 指针指向 curr 节点的 next,即 prev.next = curr.next。
3. 如果 curr 节点的值不等于 prev 节点的值,说明 curr 节点不是重复节点,将 prev 指针和 curr 指针都向前移动一位,即 prev = curr,curr = curr.next。
4. 重复执行步骤 2 和步骤 3,直到 curr 节点为空。
5. 返回链表的头节点 head。
具体的 Kotlin 代码实现如下:
``` kotlin
fun deleteDuplicates(head: ListNode?): ListNode? {
if (head == null) {
return null
}
var prev = head
var curr = head.next
while (curr != null) {
if (curr.`val` == prev.`val`) {
prev.next = curr.next
} else {
prev = curr
}
curr = curr.next
}
return head
}
```
这样就可以将链表中重复的元素删除,并且保持已排序的顺序。
阅读全文