链表增删改查

来源:互联网 发布:尉迟琳嘉 知乎 编辑:程序博客网 时间:2024/05/20 17:25
#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;}

0 0
原创粉丝点击