Here we have used typedef to convert "struct node" to only "node". It will save our time. And we have modified the iterate() method for link list for easier implementation.
Code :#include<stdio.h>
#include<malloc.h>
typedef struct node {
int data;
struct node* next;
} node;
void iterate(node* head);
node* insertAtBegining(node *head,int data);
node* insertAtBegining(node *head,int data){
if (head == NULL)
{
head = malloc(sizeof(node));
head->data = data;
head->next = NULL;
} else {
node* newNode = malloc(sizeof(node));
newNode->data = data;
newNode->next = head;
head = newNode;
}
return head;
}
void iterate(node* head){
for (node* i = head ; i != NULL ; i = i->next )
{
printf(" -> %d ",i->data);
}
}
void main(){
node* head1 = NULL;
//Driver Inputs:
iterate(head1);
}
Inputs: node* head1 = NULL;
head1 = insertAtBegining(head1,10);
head1 =insertAtBegining(head1,14);
head1 =insertAtBegining(head1,17);
head1 =insertAtBegining(head1,19);
head1 =insertAtBegining(head1,45);
Output : -> 45 -> 19 -> 17 -> 14 -> 10
//Insert At End
node* inserAtEnd(node* head,int data){
if (head == NULL)
{
head = malloc(sizeof(node));
head->data = data;
head->next = NULL;
} else {
node* newNode = malloc(sizeof(node));
newNode->data = data;
newNode->next = NULL;
node* i = head;
while (i->next != NULL)
{
i = i->next;
}
i->next = newNode;
}
return head;
}
Inputs: node* head1 = NULL;
head1 = inserAtEnd(head1,10);
head1 =inserAtEnd(head1,14);
head1 =inserAtEnd(head1,17);
head1 =inserAtEnd(head1,19);
head1 =inserAtEnd(head1,45);
Outputs:
-> 10 -> 14 -> 17 -> 19 -> 45
//Insert At a position
node* insertAt(node* head, int pos,int data){
if (pos == 0)
{
return insertAtBegining(head,data);
}else{
node* ptr = head;
int i = 1;
for ( ; i < pos && ptr->next != NULL ; i++, ptr = ptr->next);
if (i<pos)
{
printf("List size is smaller than given position.");
return head;
}
node* newNode = malloc(sizeof(node));
newNode->data = data;
newNode->next = ptr->next;
ptr->next = newNode;
return head;
}
}
Input : node* head1 = NULL;
head1 = inserAtEnd(head1,10);
head1 =inserAtEnd(head1,14);
head1 =inserAtEnd(head1,17);
head1 =inserAtEnd(head1,19);
head1 =inserAtEnd(head1,45);
head1 =inserAtEnd(head1,75);
iterate(head1);
head1 = insertAt(head1,2,105);
iterate(head1);
Output:
-> 10 -> 14 -> 17 -> 19 -> 45 -> 75
-> 10 -> 14 -> 105 -> 17 -> 19 -> 45 -> 75
//Delete at beginning
node* deleteAtBegining(node* head){
node* ptr = head->next;
free(head);
return ptr;
}
Input: node* head1 = NULL;
head1 = inserAtEnd(head1,10);
head1 =inserAtEnd(head1,14);
head1 =inserAtEnd(head1,17);
head1 =inserAtEnd(head1,19);
head1 =inserAtEnd(head1,45);
head1 =inserAtEnd(head1,75);
iterate(head1);
head1 = deleteAtBegining(head1);
iterate(head1);
Output:
-> 10 -> 14 -> 17 -> 19 -> 45 -> 75
-> 14 -> 17 -> 19 -> 45 -> 75
//Delete at end:
node* deleteAtEnd(node* head){
node* ptr = head;
while (ptr->next->next != NULL)
{
ptr = ptr->next;
}
free(ptr->next);
ptr->next = NULL;
return head;
}
Input: node* head1 = NULL;
head1 = inserAtEnd(head1,10);
head1 =inserAtEnd(head1,14);
head1 =inserAtEnd(head1,17);
head1 =inserAtEnd(head1,19);
head1 =inserAtEnd(head1,45);
head1 =inserAtEnd(head1,75);
iterate(head1);
head1 = deleteAtEnd(head1);
iterate(head1);
Output:
-> 10 -> 14 -> 17 -> 19 -> 45 -> 75
-> 10 -> 14 -> 17 -> 19 -> 45
//Delete at position:
node *deleteAtPosition(node *head, int pos)
{
node *ptr = head;
if (pos == 0)
{
return deleteAtBegining(head);
}
else
{
for (int i = 1; i < pos && ptr->next != NULL; i++, ptr = ptr->next);
node* freePtr = ptr->next;
ptr->next = ptr->next->next;
free(freePtr);
return head;
}
}
Input: node *head1 = NULL;
head1 = inserAtEnd(head1, 10);
head1 = inserAtEnd(head1, 14);
head1 = inserAtEnd(head1, 17);
head1 = inserAtEnd(head1, 19);
head1 = inserAtEnd(head1, 45);
head1 = inserAtEnd(head1, 75);
iterate(head1);
head1 = deleteAtPosition(head1,2);
iterate(head1);
Output:
-> 10 -> 14 -> 17 -> 19 -> 45 -> 75
-> 10 -> 14 -> 19 -> 45 -> 75
//Search Node:
int searchNode(node* head,int data){
int pos=0;
for (node* i = head; i != NULL ; i = i->next,pos++)
{
if (i->data == data)
{
return pos;
}
}
printf("Position not found");
}
Input: node *head1 = NULL;
head1 = inserAtEnd(head1, 10);
head1 = inserAtEnd(head1, 14);
head1 = inserAtEnd(head1, 17);
head1 = inserAtEnd(head1, 19);
head1 = inserAtEnd(head1, 45);
head1 = inserAtEnd(head1, 75);
iterate(head1);
printf("Node found at position: %d \n",searchNode(head1,17));
Output:
-> 10 -> 14 -> 17 -> 19 -> 45 -> 75
Node found at position: 2
Comments
Post a Comment