void reverse()
{
if(head->next==NULL||head==NULL||head->next->next==NULL) return;
node* N1=head->next;
node* pre=head;
node* cur=head->next;
while(cur)
{
node* saved=cur->next;
cur->next=pre;
pre=cur;
cur=saved;
}
head->next=pre;
if(N1)
N1->next=NULL;
}
或者:
#include <iostream>
#include<list>
using namespace std;
template <class T>
struct Node
{
T data;
Node<T>* next;
};
template <class T>//尾插建立循环单链表
Node<T>* creat_back( Node<T> * first,int len)
{
Node<T>* r=first;
for( int i=0; i<len; i++)
{
int data;
cin>>data;
Node<T>* pnew=new Node<T>;
pnew->data=data;
pnew->next=r->next;
r->next=pnew;
r=pnew;
}
r->next=NULL;
return first;
}
template <class T>//输出链表循环单链表
void show(Node<T>* first)
{
Node<T>* p=first->next;
while(p!=NULL)
{
cout<<p->data<<' ';
p=p->next;
}
cout<<endl<<endl;
}
template <class T>//单链表逆置
Node<T>* Reverse(Node<T>* first)
{
Node<T>* cur=first->next;
Node<T>* pre=NULL;
while(cur)
{
Node<T>* r=cur->next;
cur->next=pre;
pre=cur;
cur=r;
}
first->next=pre;
return first;
}
template<class T>//利用头插法进行逆置
Node<T>* Reverse_front(Node<T>* first)
{
Node<T>* p=first->next;
first->next=NULL;
while(p)
{
Node<T>* r=p->next;
p->next=first->next;
first->next=p;
p=r;
}
return first;
}
int main()
{
Node<int >* first=new Node<int>;
first=creat_back(first,5);
show(first);
first=Reverse_front(first);
show(first);
first=Reverse(first);
show(first);
return 0;
}