力扣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;
    }
}


posted @ 2021-12-12 22:38  淮南枳  阅读(15)  评论(0)    收藏  举报