您的位置:首页 > 其它

单链表基本操作实现

2017-09-30 15:53 267 查看
#include<iostream>
#include<stack>
using namespace std;

class List{
private:
struct Node{
int data;
Node *next;
Node(const int &d){
data=d;
next=NULL;
}
};
Node *head;
public:
List(){
creat_List();
}
void creat_List();
void insert(const int &d);
void print();
void sort();
void insert_pos(const int &d, const int &d1);
void erase(const int &d);
void reverse();
Node * find(const int &d){
Node *p=head;
for(;p;p=p->next)
if(p->next->data==d)
return p;
return p;
}
};

void List::creat_List(){
head=new Node(0);
}

void List::insert(const int &d){
Node *p=new Node(d);
p->next=head->next;
head->next=p;
delete p;
p=NULL;
}

void List::print(){
Node *p=head->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}

void List::sort(){
Node *p=head->next;
for(;p;p=p->next){
for(Node *q=p->next;q;q=q->next){
if(p->data<q->data)
swap(p->data,q->data);
}
}
}

void List::insert_pos(const int &d, const int &d1){
Node *p=find(d);
Node *q=new Node(d1);
q->next=p->next;
p->next=q;
}

void List::erase(const int &d){
Node *p=find(d);
Node *q=p->next;
p->next=p->next->next;
delete q;
}

void List::reverse(){
Node *p=head->next;
stack<Node *> m;

while(p){
m.push(p);
p=p->next;
}

Node *q=head;
while(!m.empty()){
q->next=m.top();
q=m.top();
m.pop();
}
q->next=NULL;
}
int main(){
List list;
list.insert(5);
list.insert(6);
list.insert(4);
list.sort();
list.insert_pos(5,3);
list.erase(4);
list.print();
list.reverse();
list.print();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: