diff --git a/LINKED LIST/reverse_linkedlist.c b/LINKED LIST/reverse_linkedlist.c new file mode 100644 index 0000000..87ca1c3 --- /dev/null +++ b/LINKED LIST/reverse_linkedlist.c @@ -0,0 +1,68 @@ +// Iterative C program to reverse a linked list +#include +#include + + +struct Node { + int data; + struct Node* next; +}; + + +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 code*/ +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(); +}