Skip to content

Instantly share code, notes, and snippets.

@Ajay-Raj-S
Last active September 17, 2019 16:05
Show Gist options
  • Save Ajay-Raj-S/f0959a62233537978f73deb96aeb9cf6 to your computer and use it in GitHub Desktop.
Save Ajay-Raj-S/f0959a62233537978f73deb96aeb9cf6 to your computer and use it in GitHub Desktop.
A simple Doubly Linked List.
#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