C Books Guide and List
C++ Books Guide and List
Best Java Books

3,749 questions

4,049 answers

114 comments

10,705 users

How do you reverse a singly linked list? How do you reverse a doubly linked list? Write a C program to do the same.

0 votes
398 views
asked by kab21

1 Answer

0 votes
#include "stdio.h"
 
 
// Variables
 
typedef struct node {
 
int value;
 
struct node *next;
 
}mynode;
 
 
// Globals (not required, though).
 
mynode *head, *tail, *temp;
 
 
// Functions
 
void add(int value);void iterative_reverse();void print_list();
 
 
// The main() function
 
int main()
 
{
 
head=(mynode *)0; // Construct the linked list.
 
add(1);
 
add(2);
 
add(3);
 
//Print it
 
print_list();
 
 
// Reverse it.
 
iterative_reverse();
 
 
//Print it again
 
print_list();
 
 
return(0);
 
}
 
// The reverse function
 
void iterative_reverse()
 
{
 
mynode *p, *q, *r;
 
if(head == (mynode *)0)
 
{
 
return;
 
}
p = head; q = p->next;
 
p->next = (mynode *)0;
 
while (q != (mynode *)0)
 
{
 
r = q->next;
 
q->next = p;
 
p = q; q = r;
 
}
 
head = p;
 
}
 
 
// Function to add new nodes to the linked list
 
void add(int value)
 
{
 
temp = (mynode *) malloc(sizeof(struct node));
 
temp->next=(mynode *)0;
 
temp->value=value;
 
if(head==(mynode *)0)
 
{
 
head=temp;
 
tail=temp;
 
}
 
else
 
{
 
tail->next=temp;
 
tail=temp;
 
}
 
}
 
// Function to print the linked list.
 
void print_list()
 
{
 
printf("\n\n");
 
for(temp=head; temp!=(mynode *)0; temp=temp->next)
 
{
 
printf("[%d]->",(temp->value));
 
}
 
printf("[NULL]\n\n");
 
}
 
answered by adf

Related questions

0 votes
1 answer 48 views
0 votes
1 answer 56 views
56 views asked by arnav Sr Member (1,250 points)
0 votes
1 answer 519 views
0 votes
1 answer 35 views
0 votes
1 answer 3,122 views
...