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