Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

code added #10

Merged
merged 1 commit into from
Oct 29, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
132 changes: 132 additions & 0 deletions addnodeatmiddleSLL.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
#include <stdio.h>
#include <stdlib.h>

struct node
{
int num; //Data of the node
struct node *nextptr; //Address of the node
}*stnode;

void createNodeList(int n); //function to create the list
void insertNodeAtMiddle(int num, int pos); //function to insert node at the middle
void displayList(); //function to display the list

int main()
{
int n,num,pos;
printf("\n\n Linked List : Insert a new node at the middle of the Linked List :\n");
printf("-----------------------------------------------------------------------\n");

printf(" Input the number of nodes (3 or more) : ");
scanf("%d", &n);
createNodeList(n);
printf("\n Data entered in the list are : \n");
displayList();
printf("\n Input data to insert in the middle of the list : ");
scanf("%d", &num);
printf(" Input the position to insert new node : " );
scanf("%d", &pos);
if(pos<=1 || pos>=n)
{
printf("\n Insertion can not be possible in that position.\n ");
}
if(pos>1 && pos<n)
{
insertNodeAtMiddle(num, pos);
printf("\n Insertion completed successfully.\n ");
}
printf("\n The new list are : \n");
displayList();
return 0;
}
void createNodeList(int n)
{
struct node *fnNode, *tmp;
int num, i;
stnode = (struct node *)malloc(sizeof(struct node));
if(stnode == NULL) //check whether the stnode is NULL and if so no memory allocation
{
printf(" Memory can not be allocated.");
}
else
{
// reads data for the node through keyboard
printf(" Input data for node 1 : ");
scanf("%d", &num);
stnode-> num = num;
stnode-> nextptr = NULL; //Links the address field to NULL
tmp = stnode;
//Creates n nodes and adds to linked list
for(i=2; i<=n; i++)
{
fnNode = (struct node *)malloc(sizeof(struct node));
if(fnNode == NULL) //check whether the fnnode is NULL and if so no memory allocation
{
printf(" Memory can not be allocated.");
break;
}
else
{
printf(" Input data for node %d : ", i);
scanf(" %d", &num);

fnNode->num = num; // links the num field of fnNode with num
fnNode->nextptr = NULL; // links the address field of fnNode with NULL

tmp->nextptr = fnNode; // links previous node i.e. tmp to the fnNode
tmp = tmp->nextptr;
}
}
}
}

void insertNodeAtMiddle(int num, int pos)
{
int i;
struct node *fnNode, *tmp;
fnNode = (struct node*)malloc(sizeof(struct node));
if(fnNode == NULL)
{
printf(" Memory can not be allocated.");
}
else
{
fnNode->num = num; //Links the data part
fnNode->nextptr = NULL;
tmp = stnode;
for(i=2; i<=pos-1; i++)
{
tmp = tmp->nextptr;

if(tmp == NULL)
break;
}
if(tmp != NULL)
{
fnNode->nextptr = tmp->nextptr; //Links the address part of new node
tmp->nextptr = fnNode;
}
else
{
printf(" Insert is not possible to the given position.\n");
}
}
}

void displayList()
{
struct node *tmp;
if(stnode == NULL)
{
printf(" No data found in the empty list.");
}
else
{
tmp = stnode;
while(tmp != NULL)
{
printf(" Data = %d\n", tmp->num); // prints the data of current node
tmp = tmp->nextptr; // advances the position of current node
}
}
}