public ListNode deleteDuplicatesII(ListNode head) {
		if (head == null) {
			return null;
		}
		if (head.next == null) {
			return head;
		}
		ListNode fakeHead = new ListNode(-1);
		fakeHead.next=head;
		HashMap<Integer,ListNode> hm = new HashMap();
		HashSet<Integer> hs = new HashSet();
		ListNode node = fakeHead;
		
		int i=0;
		while( node.next!=null ){
			hm.put(i,node);
			if( node.val == node.next.val ){
				hs.add(i);
				hs.add(i+1);
				i++;
			}else{
				i++;
			}
			//if(i!=0)
			node = node.next;
		}
CollectionTool.printHashSet(hs);
CollectionTool.printHashMap(hm);

System.out.println("BFClean:");
printLinkedList(fakeHead);		

		//int tmpIdx = -1;
		i=0;
		//ListNode prev = fakeHead;
		node = fakeHead;
		while( node.next != null ){
			if( hs.contains( new Integer(i) ) ){
				int pr = i-1;
				int nxt = i+1;
				hm.get(i-1).next = hm.get(i+1);
				System.out.println("pr "+pr+":"+hm.get(pr).val+";i "+i+":"+hm.get(i).val+";nxt "+nxt+":"+hm.get(nxt).val );
			}
			i++;
			node = node.next;
		}
System.out.println("AFClean:");
printLinkedList(fakeHead);
		
		
		/*
		boolean cont = false;
		
		while( node.next!=null){
			cont = false;
			while( hs.contains( new Integer(i) )){
				prev.next= node.next;
				node = node.next;
				i++;
				cont= true;
			}
			if(node==null){
				break;
			}
			prev = node;
			node = node.next;
			if(!cont)
				i++;
		}

		
		/*
		if ( head.next.next  == null){
			if(head.next.val == head.val){
				return null;
			}else{
				return head;
			}
		}
		//first three is not null
		ListNode itrPrev = head;
		ListNode itr = head;
		ListNode itrNext = head;
		// 1 2 2 3 3 4
		while (itr.next != null ) {
			itrPrev = itr;//AUX Pointer,last process
			itr = itr.next;//middle Pointer
			boolean gotEnd = false;
			if(itr.next==null){
				gotEnd= true;
				break;
			}else{
				itrNext = itr.next;
			}
System.out.println("BFClean:");
printLinkedList(head);
			// itrPrev,itr,itrNext all exist
			while (itr.val == itrNext.val) {//itr point to the next neq node
				if (itr.next != null) {
					itr = itr.next;
					itr.next = itrNext.next;
					if (itr.next != null) {
						itrNext = itr.next;
					}else{
						gotEnd = true;
						break;
					}
				}
			}
	
//			if(itrNext == null){
//				gotEnd = true;
//			}
			
			if(gotEnd){
				itrPrev.next = null;
				break;
			}else{//itr point to last same number
				itr = itrNext;//itr.next;
				itrPrev.next = itr;
			}
System.out.println("AFClean:");
printLinkedList(head);
		}*/
		return head;
    }