使用单项循环链表实现字典操作(算法导论第十章10.2-5题)
template<typename T>
void insert(SingleCycleL<T> & l,T key)
{HalfNode<T> * t = new HalfNode<T>(key);t->next = l.Nil->next;l.Nil->next = t;
}
template<typename T>
bool remove(SingleCycleL<T> & l,T key)
{HalfNode<T> *pre = l.Nil;HalfNode<T> *current = l.Nil->next;while (current->key!=key){pre = current;current = current->next;}if(current != l.Nil){pre->next = current->next;delete current;return true;}return false;
}
template<typename T>
HalfNode<T> search(SingleCycleL<T> & l,T key)
{l.Nil->key = key;HalfNode<T> *current = l.Nil->next;while (current->key!=key){current = current->next;}return current;
}
链表结构地址
测试代码
int size = 5;SingleCycleL<int> singleCycleL;for (int i = 0; i < size; ++i) {insert(singleCycleL,i);}for (int i = 0; i < size/2; ++i) {remove(singleCycleL,i);}HalfNode<int>* current = singleCycleL.Nil->next;while (current != singleCycleL.Nil){cout<<current->key<<endl;current = current->next;}