Last active
August 6, 2018 09:49
-
-
Save vinod85/ede9f0cb0fec269f0d4e1f3b76728912 to your computer and use it in GitHub Desktop.
Reverse a linked list
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Iterative C program to reverse | |
* a linked list */ | |
#include<stdio.h> | |
#include<stdlib.h> | |
/* Link list node */ | |
struct Node | |
{ | |
int data; | |
struct Node* next; | |
}; | |
/* Function to reverse the linked list */ | |
static void reverse(struct Node** head_ref) | |
{ | |
struct Node* prev = NULL; | |
struct Node* current = *head_ref; | |
struct Node* next = NULL; | |
while (current != NULL) | |
{ | |
// Store next | |
next = current->next; | |
// Reverse current node's pointer | |
current->next = prev; | |
// Move pointers one position ahead. | |
prev = current; | |
current = next; | |
} | |
*head_ref = prev; | |
} | |
/* Function to push a node */ | |
void push(struct Node** head_ref, int new_data) | |
{ | |
struct Node* new_node = | |
(struct Node*) malloc (sizeof(struct Node)); | |
new_node->data = new_data; | |
new_node->next = (*head_ref); | |
(*head_ref) = new_node; | |
} | |
/* Function to print linked list */ | |
void printList(struct Node *head) | |
{ | |
struct Node *temp = head; | |
while(temp != NULL) | |
{ | |
printf("%d ", temp->data); | |
temp = temp->next; | |
} | |
} | |
/* Driver program to test above function*/ | |
int main() | |
{ | |
/* Start with the empty list */ | |
struct Node* head = NULL; | |
push(&head, 20); | |
push(&head, 4); | |
push(&head, 15); | |
push(&head, 85); | |
printf("Given linked list\n"); | |
printList(head); | |
reverse(&head); | |
printf("\nReversed Linked list \n"); | |
printList(head); | |
getchar(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment