带头节点(头节点不变)单链表就地逆置(递归)
#include <cstddef>
#include <cstdlib>
#include<iostream>
using namespace std;
typedef struct LiNode{
int date;
LiNode* next;
}LiNode,*List;
void creat_list(List Head){
List tmp,r;
r=Head;
int i;
cout<<"please input num"<<endl;
cin>>i;
while(i!=-1){
tmp = (LiNode*)malloc(sizeof(LiNode));
tmp->date=i;
tmp->next=NULL;
r->next=tmp;
r=tmp;
cin>>i;
}
}
void NiList(LiNode* T,List list,int flag){
flag++;
if(flag==1){
if(list->next==NULL){return;}
else{T=list->next;}
if(T->next==NULL)return;}
if(T->next==NULL||T->next->next==NULL){list->next=T->next;}
else{
NiList(T->next,list,flag);
}
T->next->next=T;
if(flag==1){T->next=NULL;return;}
}
void printLink(List head){
List tmp = head;
while(tmp!=NULL){
cout<<tmp->date<<" --> ";
tmp=tmp->next;
}
cout<<"NULL"<<"\nHad Successful!!!";
}
int main(){
List head = (List)malloc(sizeof(LiNode));
head->date=0;
creat_list(head);
LiNode* t=NULL;
NiList(t,head,0);
printLink(head);
}