单链表的实现(cpp)

单链表的实现(cpp版本)

链表节点的定义

template <class T>
struct LinkNode //节点类
{
   
    T Data;         //节点的数据
    LinkNode *Next; //指向该节点的下一个节点的指针
    LinkNode() : Next(NULL)
    {
   
        cout << "please enter data: ";
        cin >> Data;
    }
    LinkNode(const T &d, LinkNode *p = NULL) : Data(d), Next(p) {
   }
    ~LinkNode() {
   }
};

链表实例化

template <class T>
SingleLinkedList<T>::SingleLinkedList(int len)
{
   
    LinkNode<T> *Cur;
    for (size_t i = 0; i < len; i++)
    {
   
        Cur = new LinkNode<T>();
        if (i == 0)
        {
   
            Head = Cur;
            Tail = Cur;
        }
        else
        {
   
            Tail->Next = Cur;
            Tail = Tail->Next;
        }
        ListSize++;
    }
}

删除链表的某一节点

template <class T>
void SingleLinkedList<T>::Delete(const T &Data)
{
   
    LinkNode<T> *Prev = this->Head;
    LinkNode<T> *Temp = nullptr;
    if (this->Head->Data == Data)
    {
   
        this->Head = Prev->Next;
        Prev->Next = nullptr;
        free(Prev);
        ListSize--;
    }

    while (Prev->Next != nullptr && Prev->Next->Data != Data)
    {
   
        Prev = Prev->Next;
    }
    if (Prev->Next != nullptr && Prev->Next != this->Tail)
    {
   
        Temp = Prev;
        Temp->Next = Prev->Next->Next;
        free(Prev->Next);
        ListSize--;
    }
    else
    {
   
        this->Tail = Prev;
        this->Tail->Next = nullptr;
        free(Prev->Next);
        ListSize--;
    }
}

删除整个链表

template <class T>
void SingleLinkedList<T>::DeleteList()
{
   
    LinkNode<T> *Temp, *DeleteTemp;
    DeleteTemp = this->Head;
    while (DeleteTemp != nullptr)
    {
   
        Temp = DeleteTemp->Next;
        free
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值