# C program to find the middle node of the singly linked list

In this tutorial, we will learn how to find the middle node of the singly linked list using the C program? By Nidhi Last updated : August 02, 2023

## Problem statement

Given a singly linked list, we have to find the middle node of the list.

## C program to find the middle node of the singly linked list

The source code to find the middle node of the list is given below. The given program is compiled and executed using GCC compile on UBUNTU 18.04 OS successfully.

```// C program to find the middle node of

#include <stdio.h>
#include <stdlib.h>

//Self-referential structure to create the node.
typedef struct tmp {
int item;
struct tmp* next;
} Node;

//structure for creating the linked list.
typedef struct
{
Node* tail;

} List;

//Initialize List
void initList(List* lp)
{
lp->tail = NULL;
}

//Create node and return the reference of it.
Node* createNode(int item)
{
Node* nNode;

nNode = (Node*)malloc(sizeof(Node));

nNode->item = item;
nNode->next = NULL;

return nNode;
}

//Add a new item at the end of the list.
{
Node* node;
node = createNode(item);

//if list is empty.
lp->tail = node;
}
else {
lp->tail->next = node;
lp->tail = lp->tail->next;
}
}

//Add a new item at the beginning of the list.
{
Node* node;
node = createNode(item);

//if list is empty.
lp->tail = node;
}
else {
}
}

//To print the list from start to end of the list.
void printList(List* lp)
{
Node* node;

printf("\nEmpty List");
return;
}

while (node != NULL) {
printf("| %05d |", node->item);
node = node->next;

if (node != NULL)
printf("--->");
}
printf("\n\n");
}

void findMiddleNode(List* lp)
{
Node* temp;

int count = 0;
int middle = 0;

while (temp != NULL) {
count++;
temp = temp->next;
}

middle = count / 2;
if (count % 2 != 0)
middle += 1;
count = 0;

while (temp != NULL) {
count++;
if (count == middle) {
printf("Middle node is: %d\n", temp->item);
break;
}
temp = temp->next;
}
}

//Main function to execute program.
int main()
{
List* lp;

lp = (List*)malloc(sizeof(List));

initList(lp);

printf("List:\n");
printList(lp);

findMiddleNode(lp);

return 0;
}
```

## Output

```List:
| 00101 |--->| 00102 |--->| 00103 |--->| 00104 |--->| 00105 |

Middle node is: 103
```

## Explanation

Here, we created a self-referential structure to implement a linked list, a function to add a node at the start and end of the list, and a function findMiddleNode() to find the middle node from the linked list.

In the main() function, we created a singly linked list and called the function findMiddleNode() to find the middle node.