题意理解:
删除链表中所有连续重复的项(当前元素和被重复元素一删除);
题目分析:
1. 使用双指针,其中,一个指针标示前面未发生重复的元素位置,一个指针标示当前位置,然后,从左向右处理;
2. 注意第一个指针的状态改变判定;
解题代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode prePreP=head;
ListNode curP=head;
ListNode ans=head;
int preVal=0;
int cnt=0;
while(curP!=null){
//System.out.println("curP.val= "+curP.val);
if(curP==head){
preVal=curP.val;
curP=curP.next;
continue;
}
if(curP.val==preVal){
if(prePreP.val==preVal){
prePreP=curP.next;
ans=prePreP;
cnt=0;
}else{
cnt=0;
prePreP.next=curP.next;
}
}else{
if(prePreP!=curP){
cnt++;
}
if(cnt>=2){
prePreP=prePreP.next;
}
preVal=curP.val;
}
curP=curP.next;
// if(prePreP!=null){
// System.out.println("prePreP.val= "+prePreP.val);
// }
// if(ans!=null){
// System.out.println("ans.val= "+ans.val);
// }
}
return ans;
}
}