//reverse a linked list
#include<stdio.h>
#include<stdlib.h>
void Insert(int data);
void Print();
void Reverse();
typedef struct Node{
int data;
struct Node *next;
}Node;
Node *head;
int main()
{
head = NULL;
Insert(1);
Insert(2);
Insert(3);
Insert(4);
Print();
Reverse();
Print();
return 0;
}
void Insert(int data)
{
Node *newnode = (Node*)malloc(sizeof(Node));
newnode->data = data;
newnode->next = NULL;
if(head == NULL)
{
head = newnode;
return;
}
Node *temp = head;
while(temp->next != NULL)
{
temp = temp->next;
}
temp->next = newnode;
}
void Print()
{
Node *temp = head;
printf("List is: \n" );
while(temp != NULL)
{
printf("%d ", temp->data); //attention
temp = temp->next;
}
}
void Reverse()
{
Node *prevnode, *curnode, *nextnode;
curnode = head;
prevnode = NULL;
nextnode = NULL;
while(curnode)
{
nextnode = curnode->next;
curnode->next = prevnode; //reverse
prevnode = curnode;
curnode = nextnode; //move to next
} //nextnode and curnode both all null when the loop finished;
//prevnode move to end;
head = prevnode;
}
//reverse a linked list using recursion
#include <stdio.h>
#include<stdlib.h>
typedef struct Node{
int data;
struct Node *next;
}Node;
Node *head;
void Insert(int data)
{
Node *newnode = (Node *)malloc(sizeof(Node));
newnode->data = data;
newnode->next = NULL;
if(head == NULL)
{
head = newnode;
return;
}
Node *temp = head;
while(temp->next != NULL)
{
temp = temp->next;
}
temp->next = newnode;
}
void Print()
{
Node *temp = head;
while(temp == NULL)
return;
printf("List is:\n");
while(temp != NULL)
{
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
void Reverse(Node *p)
{
if(p->next == NULL) // now p is the last element;
{
head = p; //head ponit to a new node(p is reversed)
return;
}
Reverse(p->next);
Node *q = p->next;
q->next = p;
p->next = NULL;
}
int main()
{
head = NULL;
Insert(1);
Insert(2);
Insert(3);
Insert(4);
Insert(5);
Print();
Reverse(head);
Print();
return 0;
}