题目: 83. 删除排序链表中的重复元素
题目类型: 已排序单向链表去重
使用技巧: 双指针
解题思路
- 使用双指针技巧,定义 fast 快指针和 slow 慢指针
- 快指针先走,判断当前 fast 的值是否和 slow 的值重复
- 如果是,则 fast 跳到下一个元素,slow 不变
- 如果否,则将 slow 的链指向 fast,然后 fast 跳到下一个元素
- 将判断放到循环里面,如果 fast 为空,则循环结束
- 最后将 slow 的链断掉,
- 严谨:判断链表头是否为空
详细代码
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head == null){
return null;
}
ListNode slow = head;
for(ListNode fast = head; fast != null; fast=fast.next){
if(slow.val != fast.val){
slow.next = fast;
slow = slow.next;
}
}
//如果不断的话,slow 的链还会指向最后一个与当前值重复的元素,就会导致出现重复值
slow.next = null;
return head;
}
}
该博客介绍了如何通过双指针技巧有效地删除排序链表中的重复元素。具体步骤包括设置快慢指针,遍历链表,当快指针的值不等于慢指针的值时,更新慢指针并指向快指针,最后断开慢指针的链接以确保无重复。这种方法优化了链表操作的时间复杂度。
2365

被折叠的 条评论
为什么被折叠?



