单项循环链表

单项循环链表

//
// Created by 许加权 on 2021/7/12.
//

#ifndef C11LEARN_SINGLECYCLELINK_H
#define C11LEARN_SINGLECYCLELINK_H
#include "chapter10.h"
template<typename T>
class SingleCycleL
{
public:
    HalfNode<T> *Nil;
public:
    SingleCycleL(){
        Nil = new HalfNode<T>();
        Nil->next = Nil;
    }
    SingleCycleL(const SingleCycleL<T> &l)
    {
        Nil = new HalfNode<T>();
        Nil->next = Nil;
        copy(l);
    }
    const SingleCycleL<T>& operator = (const SingleCycleL<T> &l)
    {
        clear();
        copy(l);
        return *this;
    }
    virtual ~SingleCycleL()
    {
        clear();
        if(Nil!= nullptr)
        {
            delete Nil;
            Nil = nullptr;
        }
    }
    void clear()
    {
        HalfNode<T>* current = Nil->next;
        while (current != Nil)
        {
            HalfNode<T>*node = current;
            current = current->next;
            delete node;
        }
        Nil->next = Nil;
    }
    void copy(const SingleCycleL<T> &l)
    {
        HalfNode<T>* current = l.Nil->next;
        HalfNode<T>* current_self = Nil;
        while (current!= l.Nil)
        {
            HalfNode<T> * node = new HalfNode<T>(current->key);
            current = current->next;
            current_self->next = node;
            current_self = node;
        }
        current_self->next = Nil;
    }
};
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;
}
#endif //C11LEARN_SINGLECYCLELINK_H

辅助类HalfNode链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值