From b8cb5e79afb4bcb3594ce5ffb6a0057e5f0125a7 Mon Sep 17 00:00:00 2001 From: Harsha Kaslikar <91220929+HKaslikar@users.noreply.github.com> Date: Thu, 13 Oct 2022 00:55:52 +0530 Subject: [PATCH] find middle of linked list --- find middle of linked list.c | 79 ++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 find middle of linked list.c diff --git a/find middle of linked list.c b/find middle of linked list.c new file mode 100644 index 0000000..49181c7 --- /dev/null +++ b/find middle of linked list.c @@ -0,0 +1,79 @@ +/ C program to find middle of linked list +#include +#include + +// Link list node +struct Node +{ + int data; + struct Node* next; +}; + +// Function to get the middle of +// the linked list +void printMiddle(struct Node *head) +{ + struct Node *slow_ptr = head; + struct Node *fast_ptr = head; + + if (head!=NULL) + { + while (fast_ptr != NULL && + fast_ptr->next != NULL) + { + fast_ptr = fast_ptr->next->next; + slow_ptr = slow_ptr->next; + } + printf("The middle element is [%d]", + slow_ptr->data); + } +} + +void push(struct Node** head_ref, + int new_data) +{ + // Allocate node + struct Node* new_node = + (struct Node*) malloc(sizeof(struct Node)); + + // Put in the data + new_node->data = new_data; + + // Link the old list off the new node + new_node->next = (*head_ref); + + // Move the head to point to the new node + (*head_ref) = new_node; +} + +// A utility function to print a given +// linked list +void printList(struct Node *ptr) +{ + while (ptr != NULL) + { + printf("%d->", ptr->data); + ptr = ptr->next; + } + printf("NULL"); +} + +// Driver code +int main() +{ + // Start with the empty list + struct Node* head = NULL; + int i; + + for (i = 5; i > 0; i--) + { + push(&head, i); + printList(head); + printMiddle(head); + } + return 0; +} +Output: + +5->NULL +The middle element is [5]