#include <list>
#include <iostream>

using namespace std;

template<class T>
void remove_duplicates(list<T>& li)
{
	list<T>::iterator i,j;
	j=li.begin();
	if(li.size()<2)return;/////li is a blank list or has only one element,done;
	for(i=(j++);i!=li.end();)//i following j;
	{
		if(*j==*i)////////////compare *i *j two adjacent element
		{/////////////////////they are same
			li.erase(i);//////delete *i;
			i=(j++);    //////i change back to following j;  
		}
		else 
		{/////////////////////they are not same,
			j++;i++;//////////prepare for the next compare
		}
	}
}

/////////////main test///////

int main(){
	list<char> ss;
	list<char>::iterator i;
	ss.push_back('1');	
	ss.push_back('1');	
	ss.push_back('3');
	ss.push_back('3');
	ss.push_back('5');	
	ss.push_back('5');	
	ss.push_back('7');
	ss.push_back('7');
	ss.push_back('9');	
	ss.push_back('9');	
	ss.push_back('0');
	ss.push_back('0');
	ss.push_back('C');	
	ss.push_back('C');	
	ss.push_back('C');
	ss.push_back('C');
	cout<<"\nBefore size:"<<ss.size();
	cout<<endl;
	for(i=ss.begin();i!=ss.end();i++)cout<<(*i);
	remove_duplicates(ss);
	cout<<"\nAfter size:"<<ss.size();
	cout<<endl;
	for(i=ss.begin();i!=ss.end();i++)cout<<(*i);
	cout<<endl;
	return 0;
}
