#include <iostream>
using namespace std;
typedef int T;
class List{
struct Node{
T data;
Node *next;
Node(const T &d=T()):data(d),next(NULL){};//node构造函数,T()零初始化
};
Node *head;
int len;
public:
List():head(NULL),len(0){};
void push_front(const T&d){//前插
// Node *p=new Node(d);
// p->next=head;
// head=p;
insert(d,0);
}
List& push_back(const T&d){//尾插
insert(d,size());
return (*this);
}
int size()const{//遍历
return len;
}
Node *&getptr(int pos)//找到指定位置的指针
{
if(pos<0||pos>size()) pos=0;
if(pos==0) return head;
Node *p=head;
for(int i=1;i<pos;i++){
p=p->next;
}
return (*p).next;
}
void insert(const T&d,int pos){//插入任意位置
Node *&p=getptr(pos);
Node *n=new Node(d);
n->next=p;
p=n;
}
void travel()const{//遍历
Node *p=head;
while(p!=NULL){
cout<<p->data<<' ';
p=p->next;
}
cout<<endl;
}
void clear(){//释放
while(head!=NULL){
Node *p=head->next;
delete head;
head=p;
}
}
void erase(int pos){
if(pos<0||pos>=size()) return;
Node *pn=getptr(pos);
Node *p=pn;
pn=pn->next;
delete p;
--len;
}
int find(const T& d)const
{
int pos=0;
Node *p=head;
while(p!=NULL){
if(p->data==d) return pos;
p=p->next;
pos++;
}
return -1;
}
void remove(const T&d){//删除
int pos;
while((pos=find(d))!=-1)
erase(pos);
}
void set(int pos,const T&d){//修改
if(pos<0||pos>=size())return ;
getptr(pos)->data=d;
}
~List(){clear();};
};
int main(void)
{
List l;
l.push_front(10);
l.push_front(20);
l.push_front(30);
l.push_back(50);
l.insert(40,2);
l.travel();
return 0;
}
链表增删改查
最新推荐文章于 2021-06-03 12:06:44 发布