数据结构:单链表的逆置

原理图如上:主要思路是割裂,从前到后有层次的逆置,先逆置12,此时3456...都被割裂开了,然后将3连同逆置,一直这样下去。

头文件如下:

链表类的声明

#include<bits/stdc++.h>
using	namespace	std;
template<class	T>
struct	Node
{
	T	data;
	struct	Node<T>*next;
};

template<class	T>
class	Linklist
{
	public:
		Linklist(){front=new	Node<T>;front->next=NULL;}//无参构造函数
		Linklist(T	a[],int	n);//有参构造函数
		void	Printlist();
		~Linklist();
		void	reverse();
	private:
		Node<T>*front;
};

template<class	T>
Linklist<T>::Linklist(T	a[],int	n)
{
	front=new	Node<T>;
	Node<T>*r=front;
	for(int	i=0;i<n;i++)
	{
		Node<T>*s=new	Node<T>;
		s->data=a[i];
		r->next=s;
		r=s;
	}
	r->next=NULL;
}

template<class	T>
Linklist<T>::~Linklist()
{
	Node<T>*p=front;
	while (p)
	{
		Node<T>*q=p;
		p=p->next;
		delete q;
		q=NULL;
	}

}

template<class	T>
void	Linklist<T>::Printlist()
{
	Node<T>*s=front->next;;
	while(s!=NULL)
	{
		cout<<s->data<<" ";
		s=s->next;
	}
}

 主函数如下:

#include<bits/stdc++.h>
#include"Linklist.h"
//逆置算法
template<class	T>
void	Linklist<T>::reverse()

{
    Node<T>*p,*q;
    if(front->next&&front->next->next)
    {
    	p=front->next;
    	q=p->next;
    	p->next=NULL;
    	while(q)
    	{
    		p=q;
    		q=q->next;
    		p->next=front->next;
    		front->next=p;
		}
	}	
}

using	namespace	std;
int	main()
{
	int	a[10]={2,0,0,3,0,7,1,4};
	Linklist<int>list(a,8);
	cout<<"初始表:";
	list.Printlist();
	cout<<endl;
	list.reverse();
	cout<<"逆置表:"; 
	list.Printlist();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值