C++用类实现单链表的元素首尾逆置

该文章展示了一种使用C++面向对象编程来实现单链表元素逆置的方法,通过创建一个List类,包含插入、打印和逆置链表的方法。类的构造和析构函数管理链表的生命周期,逆置功能通过迭代实现,将链表的首尾节点互换。
摘要由CSDN通过智能技术生成

想实现单链表的元素逆置,但发现基本都是用结构体实现的,既然C++的特色就是面对对象,那么当然也能用面对对象来实现,而且可以把链表的节点封装起来,也更加安全,于是参考了一些文章,做了一些优化并添加了注释,有问题的话可以留言

//C++用类实现单链表的元素首尾逆置

#include <iostream>

using namespace std;



typedef struct LNode

{

    int data;//数据

    LNode *next;//指向下一个节点的指针

}LNode, *LinkList;//LNdoe是普通节点,LinkList是头节点



class List

{

    private:

        LinkList L; //L指向头节点

        int len; //链表长度

    public:

        List()

        {//构造函数

            len = 0;

            L = new LNode;

            L->next = NULL;

        }

        ~List()

        {//析构函数

            delete[] L;

        }

        void insert(int n)

        {//尾插法

            LNode *r = L; //尾指针

            LNode *p = new LNode; //指向新节点的指针

            p->next = NULL;

            p->data = n;

            len++;

            if(L->next == NULL)

            {

                L->next = p;

                return;

            }

            while(r->next != NULL) //使r指向尾节点

            {

                r = r->next;

            }

            r->next = p;

        }

        void print()

        {//遍历链表

            cout<<"一共有"<<len<<"个结点"<<endl;

            LNode *p = NULL;

            p = L->next; //pz指向首元节点

            while(p)

            {

                cout<<p->data<<" ";

                p = p->next;

            }

            cout<<endl;

        }

        void reverse()

        {

            if(L->next == NULL || L->next->next == NULL)

            {

                return;

            }

            LNode *p = L->next;

            LNode *q = p->next;

            LNode *r = NULL;

            while(q)

            {

                r = q->next;

                q->next = p;

                p = q;

                q = r;

            }

            L->next->next = NULL; //首元节点变尾节点

            L->next = p; //现在p指向尾节点,尾节点变首元节点

        }

};



int main()

{

    List l;

    l.insert(3);

    l.insert(5);

    l.insert(19);

    l.insert(4);

    l.insert(8);

    l.insert(10);

    l.insert(23);

    l.insert(7);

    cout<<"逆置前: ";

    l.print();

    l.reverse();

    cout<<"逆置后: ";

    l.print();

}

 参考文章地址(63条消息) C++面向对象方式建立链表以及相关操作_面向对象编程设计用模板设计链表_糖醋web排骨的博客-CSDN博客

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值