zoukankan      html  css  js  c++  java
  • 添加翻转功能的list类

    #include<iostream>
    using namespace std;
    
    struct node
    {
    	int data;
    	node *next;
    };
    class List
    {
    public:
    	List();
    	List(List &L);
    	~List();
    	void insert(const int);
    	bool IsEmpty();
    	size_t ListLen();
    	int GetElem(size_t);
    	void append(size_t,int);//在第i个位置插入数值
    	void Display();
    	void remove(size_t);
    	int FindElem(int elm);
    	void merge(List &L);
    	node* GetFN();
    	node* GetEN();
    	void reverse();
    private:
    	node *p;
    };
    List::List()
    {
    	p = new node;
    	p->next = NULL;
    }
    List::List(List &L)
    {
    	p = L.GetFN();
    }
    List::~List()
    {
    	delete p;
    }
    node* List::GetFN()
    {
    	return p;
    }
    node* List::GetEN()
    {
    	node *q = p->next, *pre = q;
    	while (q)
    	{
    		pre = q;
    		q = q->next;
    	}
    	return pre;
    }
    void List::insert(const int a)
    {
    	node *q = p;
    	while (q->next)
    	{
    		q = q->next;
    	}
    	node *m = new node;
    	m->data = a;
    	m->next = NULL;
    	q->next = m;
    }
    void List::Display()
    {
    	node *q = p->next;
    	while(q)
    	{
    		cout << q->data << " ";
    		q = q->next;
    	}
    	cout << endl;
    }
    bool List::IsEmpty()
    {
    	node *q = p->next;
    	return q==NULL?1:0;
    }
    size_t List::ListLen()
    {
    	if(IsEmpty())
    		return 0;
    	node *q = p->next;
    	size_t i = 0;
    	while (q)
    	{
    		++i;
    		q = q->next;
    	}
    	return i;
    }
    int List::GetElem(size_t i)
    {
    	node *q = p->next, *pre = q;
    	while (i--)
    	{
    		if(!q)
    			throw runtime_error("error"); 
    		pre = q;
    		q = q->next;
    	}
    	return (*pre).data;
    }
    void List::append(size_t i,int a)
    {
    	node *q = p->next, *pre = q;
    	while (i--)
    	{
    		if(!q)
    			throw runtime_error("error"); 
    		pre = q;
    		q = q->next;
    	}
    	node *m = new node;
    	m->data = a;
    	m->next = q;
    	pre->next = m;
    }
    void List::remove(size_t i)
    {
    	node *q = p->next, *pre = q;
    	while (--i)
    	{
    		if(!q)
    			throw runtime_error("error"); 
    		pre = q;
    		q = q->next;
    	}
    	pre->next = q->next;
    	delete q;
    }
    void List::merge(List &L)
    {
    	this->GetEN()->next = L.GetFN()->next;
    }
    int List::FindElem(int elm)
    {
    	node *q = p->next, *pre = q;
    	int i = 0;
    	while (q)
    	{
    		++i;
    		if((*q).data == elm)
    			return i;
    		pre = q;
    		q = q->next;
    	}
    	if(q == NULL)
    		throw runtime_error("can't find");  
    	else
    		return i;
    }
    //翻转
    void List::reverse() { if (p->next == NULL) return; node *ptr = p->next; while(ptr->next != NULL) { node *temp = ptr->next; ptr->next = ptr->next->next; temp->next = p->next; p->next = temp; } } int main() { List l,m; l.insert(1); l.insert(12); l.insert(10); l.Display(); l.reverse(); l.Display(); m.insert(0); m.insert(-90); m.Display(); l.merge(m); l.Display(); cout << endl; //cout << l.GetElem(3); }
  • 相关阅读:
    ssh远程执行命令
    华为交换机配置命令总结
    dmidecode查看设备硬件信息
    tcpdump高级过滤技巧
    ifconfig 下面的一些字段(errors, dropped, overruns)
    awk 高级技巧
    intel82599在centos6.5下编译安装
    非默认安装目录下mysql数据的导出与导入
    bash中使用mysql中的update命令
    mysql查看修改字符集
  • 原文地址:https://www.cnblogs.com/xiangshancuizhu/p/2131414.html
Copyright © 2011-2022 走看看