#include<iostream>
using namespace std;
typedef class student
{
public:
int scores;
student *next;
}*List,lists;
void reverse_list(List L,int k); //k 代表反转几个节点
void printlist(List L) ;//递归打印
void insert_List(List L,int e);//插入
void creat(List &L);
void dg_reverse(List L,List &temp,List head);//带头节点的单链表的反转递归 L为
int main()
{
List L=new lists;
L=NULL;
creat(L);
for(int i=1;i<=7;i++)
{
insert_List(L,i);
}
printlist(L);
cout<<endl;
/*cout<<"你想反转几个节点呢"<<endl;
int k;
cin>>k;
reverse_list(L,k);
printlist(L);*/
List temp,head=L;
dg_reverse(L,temp,head);
printlist(L);
cout<<endl;
return 0;
}
void creat(List &L)
{
if(L==NULL)
{
List s=new lists;
s->next=NULL;
L=s;
}
}
void insert_List(List L,int e)//插入
{
while(L->next!=NULL)
{
L=L->next;
}
List s=new lists;
s->next=L->next;
s->scores=e;
L->next=s;
}
void printlist(List L) //递归打印
{
if(L->next==NULL)
{
return ;
}
else
{
cout<<L->next->scores<<" ";
printlist(L->next);
}
}
void reverse_list(List L,int k) //k 代表反转几个节点 (非递归)
{
int i=1;
List news=L->next;
List pre_news=news;//把第一个节点保存起来
List old=news->next;
List temp;
while(i<k)
{
temp=old->next;
old->next=news;
news=old;
old=temp;
i++;
}
pre_news->next=temp;
L->next=news; //关键点
}
void dg_reverse(List L,List &temp,List head)//带头节点的单链表的反转递归 L为
{
if(L->next==NULL)
{
temp=L;
}
if(L->next!=NULL)
{
dg_reverse(L->next,temp,head);
if(head!=L)
{
L->next->next=L;
L->next=NULL;
}
else
{
L->next=temp;
}
}
}