直接删除法
public class Solution {
public ListNode deleteDuplication(ListNode pHead) {
if(pHead==null)
return null;
//方法一:直接删除法,自己写的,比较冗余,比官方解法确实复杂了些
ListNode vHead = new ListNode(0);
vHead.next = pHead;
ListNode pre = vHead;
ListNode cur = pHead;
while(cur!=null){
boolean Flag = true;
if(cur.next!=null && cur.val==cur.next.val){
ListNode suc = cur.next;
//找到下一个比cur结点值大的结点,pre指向该结点
boolean flag = true;//判断状态有没有改变
while(suc!=null){
if(suc.val>cur.val){
pre.next = suc;
cur = suc;
flag = false;
Flag = false;
break;
}
suc = suc.next;
}
if(flag){ //flag为true,说明后面结点的值没有大于cur结点的值
pre.next = null;
break;
}
}
if(Flag){
pre = cur;
cur = cur.next;
}
}
return vHead.next;
//方法二:官方解法(java模仿)
ListNode vHead = new ListNode(0);
vHead.next = pHead;
ListNode pre = vHead;
ListNode cur = pHead;
while(cur!=null){
if(cur.next!=null && cur.val==cur.next.val){
cur = cur.next;
while(cur.next!=null && cur.val==cur.next.val)
cur = cur.next;
cur = cur.next;
pre.next = cur;
} else {
pre = cur;
cur = cur.next;
}
}
return vHead.next;
}
}