题目: 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;
}
}