List: the list to remove duplicates, leaving only a

 public Node deleteDuplicated(Node head) {//链表去重,留下一个
        if (head == null) {
            return head;
        }

        Node prev = null;
        Node p1 = head;
        Node p2 = head.next;

        while (p2 != null) {
            if (p1.val != p2.val) {
                prev = p1; p1 = p2; p2 = p2.next;
            } else {
                while (p2 != null && p2.val == p1.val) {//刚进来p21=null。执行一次后可能为null,所以在这里要保证
                    p2 = p2.next;
                }

                if (prev == null) {
                    head = p2;
                } else {
                    prev.next = p2;
                }

                p1 = p2;
                if (p2 != null) {
                    p2 = p2.next;
                }
            }
        }

        return head;
    }

Guess you like

Origin blog.51cto.com/14232658/2444524