Last active
September 17, 2019 16:05
-
-
Save Ajay-Raj-S/f0959a62233537978f73deb96aeb9cf6 to your computer and use it in GitHub Desktop.
A simple Doubly Linked List.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<stdio.h> | |
#include<stdlib.h> | |
struct doubly { | |
struct doubly* prev; | |
int value; | |
struct doubly* next; | |
}; | |
typedef struct doubly* node; | |
node root = NULL; | |
node lastNodeAddr = NULL; | |
node nodeCreation(int value) { | |
node temp = (node) malloc(sizeof(struct doubly)); | |
temp->prev = NULL; | |
temp->value = value; | |
temp->next = NULL; | |
return temp; | |
} | |
void insertInTheList(node temp) { | |
if(root == NULL) { | |
root = temp; | |
lastNodeAddr = root; | |
} else { | |
temp->prev = lastNodeAddr; | |
lastNodeAddr->next = temp; | |
lastNodeAddr = temp; | |
} | |
} | |
void showTheList(node head) { | |
if(head != NULL) { | |
printf("%d\n", head->value); | |
showTheList(head->next); | |
} | |
} | |
void reverseTheList(node head) { | |
if(head != NULL) { | |
reverseTheList(head->next); | |
printf("%d\n", head->value); | |
} | |
} | |
void destroyTheList(node head) { | |
if(head != NULL) { | |
destroyTheList(head->next); | |
if(head == root) { | |
root = NULL; | |
} else { | |
free(head); | |
} | |
} | |
} | |
void deleteTheNode(int deleteValue) { | |
node temp = root; | |
while(temp != NULL) { | |
if(temp->value == deleteValue) { | |
if(temp->prev == NULL) { | |
root = temp->next; | |
} else { | |
temp->prev->next = temp->next; | |
} | |
if(temp == lastNodeAddr) { | |
lastNodeAddr = temp->prev; | |
} | |
node temporaryHolder = temp; | |
temp = temp->next; | |
free(temporaryHolder); | |
} else { | |
temp = temp->next; | |
} | |
} | |
} | |
int main() { | |
int choice; | |
int localVal = 0; | |
int deleteChoice = -1; | |
int deleteNode = 0; | |
int printChoice = 0; | |
while(1) { | |
printf("1.Insert a Node\n2.show the list\n3.Deletion\n"); | |
scanf("%d",&choice); | |
switch(choice) { | |
case 1: | |
printf("Enter the Number: "); | |
scanf("%d", &localVal); | |
insertInTheList(nodeCreation(localVal)); | |
break; | |
case 2: | |
printf("Print the List or Reverse the List ? 1 : 0"); | |
scanf("%d", &printChoice); | |
if(printChoice) { | |
showTheList(root); | |
} else { | |
reverseTheList(root); | |
} | |
break; | |
case 3: | |
printf("Do you want to delete the entire List or a Node ? 1 : 0 "); | |
scanf("%d", &deleteChoice); | |
if(deleteChoice) { | |
if(root == NULL) | |
printf("List is empty!\n"); | |
else | |
destroyTheList(root); | |
} else { | |
if(root == NULL) { | |
printf("List is empty!\n"); | |
break; | |
} | |
printf("Enter the Number in the Node"); | |
scanf("%d", &deleteNode); | |
deleteTheNode(deleteNode); | |
} | |
break; | |
default: | |
printf("wrong choice\n"); | |
destroyTheList(root); | |
printf("Destroyed The list"); | |
exit(0); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment