/***************************************************
##filename : invertedlist.c
##author : GYZ
##e-mail : 1746902011@qq.com
##create time : 2018-10-08 15:55:07
##last modified : 2018-10-09 11:23:44
##description : NA
***************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10
typedef struct Node
{
int data;
struct Node *next;
} Node;
Node *createList(int n);
void printList(Node *old_head);
Node *invertedList(Node *old_head);
void destroyList(Node *new_head);
int main(int argc,char *argv[])
{
Node *old_head = NULL;
Node *new_head = NULL;
old_head = createList(10);
printList(old_head);
printf("inverted the list ...\n");
new_head = invertedList(old_head);
printList(new_head);
destroyList(new_head);
return 0;
}
Node *createList(int n)
{
Node *head = NULL;
Node *temp = NULL;
Node *curr = NULL;
int i = 0;
for(;i < n; ++i)
{
temp = (Node *)malloc(sizeof(Node));
if(temp == NULL)
{
perror("malloc"),exit(0);
}
temp->data = i;
if(0 == i)
{
head = temp;
curr = temp;
}
else
{
curr->next = temp;
curr = temp;
}
}
curr->next = NULL;
return head;
}
void printList(Node *old_head)
{
while(old_head)
{
printf("%d",old_head->data);
old_head = old_head->next;
}
printf("\n");
}
Node *invertedList(Node *old_head)
{
Node *prev = NULL;
Node *curr = NULL;
Node *late = NULL;
curr = old_head;
late = old_head->next;
while(late)
{
curr->next = prev;
prev = curr;
curr = late;
late = late->next;
}
curr->next = prev;
return curr;
}
void destroyList(Node *new_head)
{
Node *temp = NULL;
while(new_head)
{
temp = new_head->next;
free(new_head);
new_head = NULL;
new_head = temp;
}
}