#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
struct LinkListNode{
int data;
LinkListNode* next;
};
//InsertFromHead
void InsertNode(LinkListNode** HeadRef,int insertData){
LinkListNode* newNode = (LinkListNode*)malloc(sizeof(LinkListNode));
newNode->data = insertData;
newNode->next = *HeadRef;
*HeadRef = newNode;
}
void PrintLinkList(LinkListNode * ListHead){
while(ListHead!=NULL){
cout<<ListHead->data<<" ";
ListHead = ListHead->next;
}
cout<<endl;
}
//non-recursive
void ReverseLinkList(LinkListNode** HeadRef){
LinkListNode* Pre = NULL;
LinkListNode* Cur = *HeadRef;
LinkListNode* Nex = NULL;
while(Cur!=NULL){
Nex = Cur->next;
Cur->next = Pre;
Pre = Cur;
Cur = Nex;
}
*HeadRef = Pre;
}
//recursive
LinkListNode* ReverseLinkList(LinkListNode* Head){
if(Head==NULL||Head->next==NULL)
return Head;
LinkListNode* newHead = ReverseLinkList(Head->next);
Head->next->next=Head;
Head->next = NULL;
return newHead;
}
int main(){
LinkListNode* listHead = NULL;
for(int i=0; i<10; i++){
InsertNode(&listHead,i);
}
PrintLinkList(listHead);
ReverseLinkList(&listHead);
PrintLinkList(listHead);
listHead = ReverseLinkList(listHead);
PrintLinkList(listHead);
return 0;
}
![]()