0001 template <typename T> Rank List<T>::uniquify() { //成批剔除重复元素,效率更高 0002 if ( _size < 2 ) return 0; //平凡列表,自然不含相等元素 0003 Rank oldSize = _size; //记录原规模 0004 ListNodePosi<T> p = first(); ListNodePosi<T> q; //p为各区段起点,q为其后继 0005 while ( tail != ( q = p->succ ) ) //反复考查紧邻的节点对(p, q) 0006 if ( p->data != q->data ) p = q; //若互异,则转向下一区段 0007 else remove( q ); //否则(相等)直接删除后者,不必如向量那样间接地完成删除 0008 return oldSize - _size; //列表规模变化量,即被删除元素总数 0009 }