#pragma once
#include<iostream>
using namespace std;
template<class ty>
struct node
{
node()
{
this->pnext = nullptr;
}
node(ty t)
{
this->t = t;
this->pnext = nullptr;
}
node(ty t,node* pnext)
{
this->t = t;
this->pnext = pnext;
}
ty t;
node* pnext;
};
template<class ty>
class list
{
public:
list()
{
this->headnode = nullptr;
}
void push_front(ty n)
{
this->headnode = new node<ty>(n, headnode);
}
void push_back(ty n)
{
if (this->headnode == nullptr)
{
push_front(n);
return;
}
node<ty>* pmove = this->headnode;
while (1)
{
if (pmove->pnext == nullptr) break;
pmove = pmove->pnext;
}
pmove->pnext = new node<ty>(n);
return;
}
void insert(int where,int n)
{
if (this->headnode == nullptr)
{
push_back(n);
return;
}
node<ty>* pmove = this->headnode->pnext;
node<ty>* pre = this->headnode;
for (int i = 0; i < where-2; i++)
{
if (pmove != nullptr)
{
pre = pmove;
pmove = pmove->pnext;
}
}
pre->pnext=new node<ty>(n, pmove);
return;
}
void pop_front()
{
if (this->headnode == nullptr) return;
node<ty>* ptemp = this->headnode;
headnode = headnode->pnext;
delete ptemp;
ptemp = nullptr;
}
void pop_back()
{
if (this->headnode == nullptr) return;
node<ty>* pmove = this->headnode;
node<ty>* pre = this->headnode;
while (1)
{
if (pmove->pnext == nullptr) break;
pre = pmove;
pmove = pmove->pnext;
}
pre->pnext = nullptr;
delete pmove;
pmove->pnext = nullptr;
}
void deletes(int n)
{
if (this->headnode == nullptr)
{
return;
}
if (n==1)
{
pop_front();
return;
}
node<ty>* pmove = this->headnode->pnext;
node<ty>* pre = this->headnode;
for (int i = 0; i < n-2; i++)
{
if (pmove->pnext == nullptr) return;
pre = pmove;
pmove = pmove->pnext;
}
pre->pnext = pmove->pnext;
}
void push_sort(ty n)
{
if (this->headnode == nullptr) push_back(n);
node<ty>* pre = this->headnode;
node<ty>* pmove = this->headnode->pnext;
int k = 0;
while (pmove != nullptr && pmove->pnext <= pmove)
{
pre = pmove;
pmove = pmove->pnext;
k++;
}
insert(k + 3, n);
}
void appends(list pl)
{
if (pl.headnode == nullptr) return;
node<ty>* pmove = pl.headnode;
while (1)
{
this->push_back(pmove->t);
pmove = pmove->pnext;
if (pmove== nullptr) return;
}
return;
}
void remove()
{
if (this->headnode == nullptr || this->headnode->pnext == nullptr) return;
node<ty>* pmove = this->headnode;
list<ty> temp;
while (1)
{
temp.push_back(pmove->t);
pmove = pmove->pnext;
if (pmove== nullptr) break;
}
this->headnode = nullptr;
this->pop_front();
node<ty>* pre = temp.headnode;
while (1)
{
this->push_front(pre->t);
pre = pre->pnext;
if (pre == nullptr) return;
}
}
void print()
{
if (this->headnode == nullptr) return;
node<ty>* pmove = this->headnode;
while (1)
{
cout << pmove->t << " ";
if (pmove->pnext == nullptr) return;
pmove = pmove->pnext;
}
cout << endl;
return;
}
node<ty>* headnode;
};
C++自写链表
最新推荐文章于 2023-03-22 00:22:56 发布