Remove Duplicates from Sorted List II

来源:互联网 发布:ssm项目管理系统源码 编辑:程序博客网 时间:2024/06/07 14:28

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.

思路: Using 3 pointer to storage the pre, cur, temp. If( cur.val == temp.val) , we need to find the end of the equal element. Else, we insert this element into the tail of pre.
易错点: 1. 要注意判断temp  是否为空。  2. 每次插完 , pre.next 一定要设置为null.

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */public class Solution {    public ListNode deleteDuplicates(ListNode head) {        if(head == null)            return null;        ListNode newHead = new ListNode(0);        ListNode pre = newHead;        ListNode cur = head;        while(cur != null){            ListNode temp = cur.next;            if(temp != null && cur.val == temp.val){//----------                while(temp != null && temp.val == cur.val){                    temp = temp.next;                }            }else{                pre.next = cur;                pre = cur;                pre.next = null;//--------            }            cur = temp;        }        return newHead.next;    }}


0 0