#include
using namespace std;
typedef struct node{
int data;
struct node *next;
}node;
node * ListCreate(){
node *pHead = (node *)malloc(sizeof(node));
if(pHead == NULL){
printf("create list failed\n");
return NULL;
}
pHead->data = 10;
pHead->next = NULL;
node *pTail = pHead;
for(int i=0; i<10; i++){
node *pTemp = (node *)malloc(sizeof(node));
pTemp->data = rand()%100;
pTemp->next = NULL;
pTail->next = pTemp;
pTail = pTemp;
}
return pHead;
}
void TarverseList(node *pHead){
if(pHead == NULL){
return;
}
node *pNode = pHead;
while(pNode != NULL){
printf("%d\n", pNode->data);
pNode = pNode->next;
}
}
void ReversePrintList(node *pHead){
if(pHead == NULL){
return;
}
ReversePrintList(pHead->next);
printf("%d\n", pHead->data);
}
node * ReverseList(node *pHead){
node *prevNode = NULL;
node *pReverseHead = prevNode;
node *pNode = pHead;
while(pNode != NULL){
node *pNextNode = pNode->next;
if(pNextNode == NULL){
pReverseHead = pNode;
}
pNode->next = prevNode;
prevNode = pNode;
pNode = pNextNode;
}
return pReverseHead;
}
int main(){
node *pHead = ListCreate();
TarverseList(pHead);
printf("after reverse\n");
ReversePrintList(pHead);
printf("after reverse\n");
node *pReverseHead = ReverseList(pHead);
TarverseList(pReverseHead);
return 0;
}