题目
解思路
移动指针的方法就行,主要是要考虑到很多特殊情况下也成立
注意不能使得p.val之中的p是null会报错
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode deleteDuplication(ListNode pHead) {
if(pHead==null)return null;
ListNode prev=new ListNode(0);
//prev is the previou node of phead
ListNode src=prev;
//这里之所以有这个src是为了最后提交结果的时候能够找到第一个节点
prev.next=pHead;
while(pHead!=null ){
if( pHead.next!=null&&pHead.val==pHead.next.val){
ListNode temp=pHead;
while(temp.next!=null && temp.val==temp.next.val ){
temp=temp.next;
}//如果有相同的元素把这个元素一直往后推进直到没有相同元素了
pHead=temp.next;
prev.next=pHead;
//删除掉所有相同的元素,调整next指针即可
}
else{
//没有相同的元素就直接的推到下一个元素上面就行
prev=pHead;
pHead=pHead.next;
}
}
return src.next;
}
}