• 这道题有个姐妹题,本题是重复元素留一个,另一道题是重复元素都去掉,区别在于是循环去重还是单个去重,意思是cur是一次跳多步还是一次跳一步
  • 另一道题中,只要cur.val == next.val,next = next.next,pre.next=next,这是在循环体里,保证pre.next取到的是相等元素的后一个,而此处只做一次循环,当cur.val==next.val,pre.next=next,保证当前pre.next就是相等元素的第二个,如果还有相等,依次后移,这样做是为了pre=cur时不会脱节。
  • 我觉得这道题还可以使用队列,当待入队的数与队首的数一致,则丢弃(姐妹题可同时队首的数丢弃),剩下的就都是符合题意的了。
import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    public ListNode deleteDuplicates (ListNode head) {
        ListNode node = new ListNode(-1);
        node.next = head;
        ListNode next;
        ListNode cur = head;
        ListNode pre = node;
        
        while(cur!=null){
            next = cur.next;
            boolean flag = false;
            if(next != null && cur.val == next.val){
                flag = true;
                pre.next = next;
            }
            if(!flag)pre = cur;
            cur = next;
        }
        return node.next;
    }
}