首先是.h文件
#pragma once
#include<iostream>
using namespace std;
class node
{
public:
int data;
node *next;
};
class linklist
{
public:
linklist();
~linklist();
void createlinkList(int n);//创建一个单链表
void travelinklist(); //遍历线性表
int getlength(); //获取线性表的长度
bool isEmpty(); //判断单链表是否为空
node* find(int finddata); //查找结点
void insertNodeAtEnd(int inserdata); //在尾部插入指定的元素
void InsertElemAtIndex(int inserdata, int n); //在指定位置插入指定元素
void InsertElemAtHead(int inserdata); //在头部插入指定元素
void DeleteElemAtEnd(); //在尾部删除元素
void DeleteAll(); //删除所有数据
void DeleteElemAtPoint(int data); //删除指定的数据
void DeleteElemAtHead(); //在头部删除节点
void reverse();
private:
node *head;
};
接下来是.cpp文件
#include "pch.h"
#include "linklist.h"
linklist::linklist()
{
head = new node;
head->data = 0;
head->next = NULL;
}
linklist::~linklist()
{
}
void linklist::createlinkList(int n)
{
node *pnew, *ptemp;
ptemp = head;
if (n<0) {
cout << "输入结点个数有误" << endl;
exit(EXIT_FAILURE);
}
for (int i = 0; i < n; i++) {
pnew = new node;
pnew->next = NULL;
pnew->data = i + 1;
ptemp->next = pnew;
ptemp = pnew;
}
}
void linklist::travelinklist()
{
if (head == NULL || head->next == NULL) cout << "链表为空" << endl;
node *ptemp = head;
while (ptemp->next!=NULL)
{
ptemp = ptemp->next;
cout << ptemp->data << " ";
}
cout << endl;
}
int linklist::getlength()
{
int res = 0;
if (head == NULL || head->next == NULL) cout << "链表为空" << endl;
node *ptemp = head->next;
while (ptemp != NULL) {
res++;
ptemp = ptemp->next;
}
return res;
}
bool linklist::isEmpty()
{
if (head->next==NULL){
return true;
}
return false;
}
node * linklist::find(int finddata)
{
if (head == NULL || head->next == NULL) {
cout << "链表为空" << endl; return nullptr;
}
node *ptemp = head;
while (ptemp->next != NULL) {
if (ptemp->data == finddata) {
return ptemp;
}
ptemp = ptemp->next;
}
return nullptr;
}
void linklist::insertNodeAtEnd(int inserdata)
{
if (head == NULL || head->next == NULL) cout << "链表为空" << endl;
else {
node *ptemp = head;
while (ptemp->next != NULL) {
ptemp = ptemp->next;
}
node* pnew = new node;
pnew->next = NULL;
pnew->data = inserdata;
ptemp->next = pnew;
}
}
void linklist::InsertElemAtIndex(int inserdata, int n)
{
if (head == NULL || head->next == NULL) cout << "链表为空" << endl;
int listcount = getlength();
if (listcount<n) cout << "输入错误" << endl;
else {
node *ptemp = head;
int icount = 1;
while (icount < n) {
icount++;
ptemp = ptemp->next;
}
node* pnew = new node;
pnew->next = ptemp->next;
pnew->data = inserdata;
ptemp->next = pnew;
}
}
void linklist::InsertElemAtHead(int inserdata)
{
node* pnew = new node;
pnew->data = inserdata;
node *ptemp = head;
if (head == NULL) {
pnew->next = NULL;
head = pnew;
}
pnew->next = ptemp->next;
ptemp->next = pnew;
}
void linklist::DeleteElemAtEnd()
{
if (head == NULL || head->next == NULL) cout << "链表为空" << endl;
else {
node *ptemp = head;
while (ptemp->next->next != NULL) {
ptemp = ptemp->next;
}
node *ppdelet = ptemp->next;
ptemp->next = NULL;
delete ppdelet;
}
}
void linklist::DeleteAll()
{
if (head == NULL || head->next == NULL) cout << "链表为空" << endl;
else {
node* p = head->next;
node* ptemp = new node;
while (p!=NULL) {
ptemp = p;
p = p->next;
ptemp->next = NULL;
delete ptemp;
}
head->next = NULL;
}
}
void linklist::DeleteElemAtPoint(int data)
{
if (head == NULL || head->next == NULL) cout << "链表为空" << endl;
else {
node *ptemp = head;
node *pdel = new node;
while (ptemp->next!=NULL) {
if (ptemp->next->data == data) {
pdel = ptemp->next;
break;
}
ptemp = ptemp->next;
}
ptemp->next = ptemp->next->next;
pdel->next = NULL;
delete pdel;
}
}
void linklist::DeleteElemAtHead()
{
node *ptemp = head;
if (ptemp == NULL || ptemp->next == NULL) cout << "链表为空" << endl;
else
{
node *pdel = new node;
pdel = ptemp->next;
ptemp->next = pdel->next;
pdel->next = NULL;
delete pdel;
}
}
void linklist::reverse()
{
if (head->next == NULL || head->next->next == NULL) cout << "链表为空" << endl;
node *phead = head->next->next;
node *ptemp = phead->next;
node *pt = head->next;
pt->next = NULL;
while (phead->next != NULL) {
ptemp = phead;
phead = phead->next;
ptemp->next = pt;
pt = ptemp;
}
phead->next = ptemp;
head->next = phead;
}