1 唯一化
template <typename T> int List<T> :: uniquify(){
if(_size<2) return 0; //平凡列表无重复
int oldSize=_size;
ListNodePosi(T) p=first(); ListNodePosi(T) q; //p为给区段起点,q为后继
while(trailer!=(q=p->succ)) //反复比对紧邻节点(p,q)
if(p->data!=q->data) p=q; 若互异,则转向下一区段
else remove(q); //否则(雷同),删除后者
return oldSize-_size; //列表规模变化量
}
2 查找
template <typename T> //在有序列表内节点p(可能是trailer)的n个(真)前驱中,找到不大于e的最后者
ListNodePosi(T) List<T>::search( T const& e,int n,ListNodePosi(T) p) const{
while(0<=n--) //从右向左逐个比较
if(((p=p->pred)->date)<=e) break; //直到命中,数值越界或范围越界
return p; //返回查找终止的位置
} // 失败时,返回区间左边界的前驱(可能时header)