描述
给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素。
样例
给出 1->2->3->3->4->4->5->null
,返回 1->2->5->null
给出 1->1->1->2->3->null
,返回 2->3->null
思路:
既然需要删除重复的元素,那么最重要的就是保存每个节点的前一个节点,如果当前节点是重复的,那么就需要使用前一个节点指向当前节点的下一个节点了。
代码:
public ListNode deleteDuplicates(ListNode head) {
ListNode pre = new ListNode(0);
pre.next = head;
ListNode h = pre;
int flag = 0;
ListNode nHead = pre.next;
while (nHead!=null && nHead.next!=null){
flag = 0;
ListNode work = nHead;
while (work!=null && work.next!=null && work.val==work.next.val){
flag = 1;
work = work.next;
}
if(flag==1){
work = work.next;
pre.next = work;
nHead = work;
}else {
pre = nHead;
nHead = nHead.next;
}
}
return h.next;