使用单项循环链表实现字典操作(算法导论第十章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;
}