C++单链表代表头和不带表头用构造函数初步实现

本文介绍了如何使用C++编程语言来实现单链表,包括带头节点和不带头节点的构造函数。通过这两种方式,可以有效地创建和操作链表数据结构。
摘要由CSDN通过智能技术生成
#include<iostream>
using namespace std;


class list
{
    public:
        list(char a)
        {
            head = new node();
            head->next = NULL;
        }
        list(int num)
        {
            //head = new node();
            
            head = NULL;
        }
                   
                    

        void insert_node_head(int num);//表头头插声明
        void insert_tail(int num);//不带表头尾插
        void display();//带表头显示
        void dis();//不带表头显示
        void deleteh();
        void delet();

    private:

        struct node
        {
            int num;
            struct node *next;
        };  

        node * head;           
};

void list::insert_node_head(int num)
{
    node * new_node = NULL;
    node * p = head->next;

    new_node = new node();
    new_node->num = num;
    //cout<<new_node->num<<endl;
    new_node->next = p;
    head->next = new_node;

}

void list::display()
{
    node * p = NULL;

    if(head == NULL)
    {
        cout<<"no link"<<endl;
    }
    else
    {
        p = head->next;

        if(p == NULL)
        {
            cout<<"the link is empty"<<endl;
            return;
        }
        else
        {
            while(p != NULL)
            {
               // printf("%d\n",p->num);
                cout<<p->num<<endl;
                p = p->next;
            }
        }
    }

}

void list::insert_tail(int num)
{
    node * p = NULL;
    node * new_node = NULL;

    new_node = new node();

    new_node->num = num;

    p = head;
    if(head == NULL)
    {
        head = new_node;
        new_node->next = NULL;
        //cout<<"1"<<head->num<<endl;
    }
    else
    {
        while (p->next != NULL)
        {
            p = p->next;
        }

        p->next = new_node;
        new_node->next = NULL;
    }
}

void list::dis()
{
    node * p = NULL;
    p = head ;
    if(p == NULL)
    {
        cout<<"the link is empty"<<endl;
        return;
    }

    while(p != NULL)
    {
        cout<<p->num<<endl;
        p = p->next;
    }
}

void list::deleteh()
{
    node* p =NULL;

    p = head->next;
    while(head->next != NULL)
    {
        p = head->next;
        head->next = head->next->next;
        delete p;
    }
    p = head;

    if((head)->next == NULL)
    {
        delete p;
    }
        
}

void list::delet()
{
    node * p = NULL;
    p = head;
    while(head != NULL)
    {
        p = head;
        head =(head)->next;
        delete p;
    }
}

int main()
{
    //list List;
    list d('a');//带表头

    cout<<"带表头单链表"<<endl;

    for(int i = 0; i < 10; i++)
    {
        d.insert_node_head(i);
    }
    d.display();
    d.deleteh();

    cout<<"不带表头单链表"<<endl;
    
    list d1(1);//不带表头

    for(int i = 1; i < 10; i++)
    {
        d1.insert_tail(i);
    }
    d1.dis();
    d1.delet();
    return 0 ;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值