单链表基本操作实现

#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;
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值