C++封装后带头结点的链表

linklist.h

#ifndef _LINKLIST_H_
#define _LINKLIST_H_
#include <iostream>
using namespace std;
typedef int DataType;
class linklist
{
private:
    DataType data;
    linklist *next;
public:


    linklist();
    ~linklist();
    //插入数据(头插法插入数据)
    void LinklistInsertHead(DataType value);
    //遍历单链表
    void LinkListPrint();
    //判断单链表是否为空
    //如果为空返回1,否则返回0
    bool LinkListIsEmpty();
    //头删法删除数据(返回删除的数据)
    DataType LinkListDeleteHead();
    //单链表反转(2)
    void LinkListReverse2();
};
#endif

linklist.cpp

#include "linklist.h"
linklist::linklist()
{
    this->next = NULL;
}


linklist::~linklist()
{
}
//头插法
void linklist::LinklistInsertHead(DataType value)
{
    linklist *tmp = new linklist;
    tmp->data = value;
    tmp->next = NULL;
    //将原本头结点后面的结点地址保存在新插入结点的指针域里面
    //头结点后面的结点地址:Head->next
    //新插入结点的指针域:tmp->next
    tmp->next = this->next;
    //将新插入结点的地址保存在头结点的指针域里面
    //新插入的结点地址:tmp
    //头结点的指针域:Head->next;
    this->next = tmp;
    return;
}
//遍历单链表
void linklist::LinkListPrint()
{
    //定义一个指针遍历保存第一个结点的地址
    linklist *p = this;

    //循环遍历单链表,直到p保存的结点的指针域为NULL,结束循环
    while(p->next != NULL)
    {
    //p指向下一个结点(p保存下一个结点的地址)
    p = p->next;
    //打印数据
    cout<<p->data<<" ";
    }
    cout<<endl;
}
    //判断单链表是否为空
    //如果为空返回1,否则返回0
bool linklist::LinkListIsEmpty()
{
    return this->next == NULL ? 1 : 0;
}
//头删法删除数据(返回删除的数据)
DataType linklist::LinkListDeleteHead()
{
    if(LinkListIsEmpty())
    {
    printf("删除失败,链表为空!\n");
    return (DataType)-1;
    }
    DataType value = this->next->data;
    linklist *tmp = this->next;
    this->next = tmp->next;


    free(tmp);
    tmp = NULL;
    return value;
}
//单链表反转(2)
void linklist::LinkListReverse2()
{
    if(LinkListIsEmpty())
    {
    printf("链表为空!\n");
    return;
    }
    linklist *h1 = new linklist;
    DataType value;
    while(this->next != NULL)
    {
        value = LinkListDeleteHead();
        h1->LinklistInsertHead(value);
    }
    this->next = h1->next;
}

main.cpp

#include "linklist.h"


int main(int argc, char const *argv[])
{
    linklist *head = new linklist;
    for(int i = 0; i < 10;i++)
    {
    head->LinklistInsertHead(i + 1);
    }
    head->LinkListPrint();
    head->LinkListDeleteHead();
    head->LinkListPrint();
    head->LinkListReverse2();
    head->LinkListPrint();
    return 0;
}

终端

judy@judy-virtual-machine:~/桌面/2022/0303$ g++ linklist.cpp main.cpp -o main
judy@judy-virtual-machine:~/桌面/2022/0303$ ./main
10 9 8 7 6 5 4 3 2 1 
9 8 7 6 5 4 3 2 1 
1 2 3 4 5 6 7 8 9 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值