力扣82 删除列表的重复元素
删除列表的重复元素
思路
这是一道常规题,双指针,注意边界条件,当用到 .next 或者 .next.next 的时候,是不是要考虑循环条件需要改一下?
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode pre = new ListNode(-300,head);//定义指向头结点的指针。
ListNode fast = pre;
ListNode slow =pre;
while(fast.next!=null&&fast.next.next!=null){//当没到最后尾。
if(fast.next.val==fast.next.next.val){fast = fast.next;continue;}//相等快指针往前移动慢指针原地不动
else if(fast!=slow){//当两指针不等的时候,就说明有重复的了,从新设定指针指向,慢指针归位,
slow.next = fast.next.next;fast =slow;
}else{
fast =fast.next;slow = slow.next;//不相等,就两个指针同时移动
}
}
if(fast!=slow){slow.next = fast.next.next;fast =slow;} //一直重复到结尾的情况,循环体里没有改变,这里得单独加一下。
return pre.next;
}
}

浙公网安备 33010602011771号