Basics of Linked List
#include<stdio.h>
#include<stdlib.h>
struct lnode{
int data;
struct lnode* next;
};
typedef struct lnode node;
node * head = NULL;
void insertAtBeginning(int val) {
node* newNode=(node*)malloc(sizeof(node));
if(newNode==NULL) {
printf("Out of memory");
return;
}
newNode -> data = val;
if(head==NULL) { // starting node is empty
newNode -> next = NULL;
head = newNode;
}
else { // starting node is head
newNode -> next = head;
head = newNode;
}
printf("inserted %d at the beginning",val);
}
void display() {
if(head==NULL) {
printf("List is empty");
return;
}
node* temp = head;
printf("Elements in the list are: ");
while(temp!=NULL) {
printf("%d ",temp -> data);
temp = temp -> next;
}
}
void insertAtPos(int pos, int val) {
int i;
node* newNode=(node*)malloc(sizeof(node));
if(newNode==NULL) {
printf("Out of memory");
return;
}
newNode -> data = val;
node* temp = head;
for(i=1;i<=pos-1;i++) {
temp = temp -> next;
if(temp==NULL) {
printf("Invalid position\n");
return;
}
}
newNode -> next = temp -> next;
temp -> next = newNode;
printf("Inserted %d at pos %d",val,pos);
}
void deleteAtpos(int pos) {
int i;
node* temp = head;
node* prev;
if(head==NULL) {
printf("Out of memory\n");
return;
}
if(pos==0) {
head = head -> next;
printf("Deleted %d",temp -> data);
free(temp);
return;
}
for(i=1;i<=pos;i++) {
prev = temp;
temp - temp -> next;
if(temp==NULL) {
printf("Invalid Position\n");
return;
}
}
prev -> next = temp -> next;
printf("Deleted %d",temp -> data);
free(temp);
}
int main() {
int choice,val,pos;
while(1){
printf("\n ----- Linked List Menu ----\n");
printf("1.insert at Beginning\n");
printf("2.Display the list\n");
printf("3.Insert at specified Position\n");
printf("4.Delete at specified Position\n");
printf("\n-----------------------\n");
printf("Enter your choice:\t");
scanf("%d",&choice);
switch(choice) {
case 1:
printf("Enter the data: ");
scanf("%d",&val);
insertAtBeginning(val);
break;
case 2:
display();
break;
case 3:
printf("Enter the pos: ");
scanf("%d",&pos);
printf("Enter the data: ");
scanf("%d",&val);
if(pos==0) {
insertAtBeginning(val);
}
else {
insertAtPos(pos,val);
}
break;
case 4:
printf("Enter the pos: ");
scanf("%d",&pos);
if(pos<0) {
printf("Invalid Position");
break;
}
deleteAtpos(pos);
break;
}
}
}
Comments
Post a Comment