/**
* Run code pada text editor masing masing agar lebih jelas outputnya
*/
#include <stdio.h>
#include <stdlib.h>
typedef struct Number {
int number;
struct Number *prev;
struct Number *next;
} Number;
Number *HEAD = NULL;
void insertBeginning(int value);
void insertEnd(int value);
void insertBefore(int key, int value);
void insertAfter(int key, int value);
void deleteBeginning();
void deleteEnd();
void deleteAt(int key);
void main() {
// Agar mudah dipahami, hapus satu satu tanda komentar pada kode dibawah dan run bertahap
// insertEnd(1);
// insertEnd(2);
// insertEnd(4);
// insertBefore(1, 0);
// insertAfter(2, 3);
// deleteBeginning();
// deleteEnd();
// deleteAt(2);
Number *HEAD_copy = HEAD;
while (HEAD_copy != NULL) {
printf("---------------------------------\n");
if (HEAD_copy->prev != NULL)
printf("\033[33m< \033[1;33mprevious\033[0;33m node address: \033[4;33m%p\033[m\n", HEAD_copy->prev);
else
printf("\033[33m< \033[1;33mprevious\033[0;33m node address: \033[4;33m%s\033[m\n", HEAD_copy->prev);
printf("\033[34m* \033[1;34mcurrent\033[0;34m node address: \033[4;34m%p\033[m\n", HEAD_copy);
printf("\033[30m* current node value: %d\n\033[m", HEAD_copy->number);
if (HEAD_copy->next != NULL)
printf("\033[32m> \033[1;32mnext\033[0;32m node address: \033[4;32m%p\033[m\n", HEAD_copy->next);
else
printf("\033[32m> \033[1;32mnext\033[0;32m node address: \033[4;32m%s\033[m\n", HEAD_copy->next);
HEAD_copy = HEAD_copy->next;
}
printf("---------------------------------\n");
}
void insertBeginning(int value) {
Number *newNode = (Number*) malloc(sizeof(Number));
newNode->number = value;
newNode->prev = NULL;
if (HEAD != NULL) {
HEAD->prev = newNode;
newNode->next = HEAD;
} else
newNode->next = NULL;
HEAD = newNode;
}
void insertEnd(int value) {
Number *newNode = (Number*) malloc(sizeof(Number));
newNode->number = value;
newNode->next = NULL;
if (HEAD != NULL) {
Number *currentNode = HEAD;
while (currentNode->next != NULL)
currentNode = currentNode->next;
currentNode->next = newNode;
newNode->prev = currentNode;
} else {
newNode->prev = NULL;
HEAD = newNode;
}
}
void insertBefore(int key, int value) {
Number *newNode = (Number*) malloc(sizeof(Number));
newNode->number = value;
if (HEAD != NULL) {
Number *currentNode = HEAD;
while (currentNode != NULL) {
if (currentNode->number == key) {
if (currentNode->prev != NULL)
currentNode->prev->next = newNode;
else
HEAD = newNode;
newNode->prev = currentNode->prev;
newNode->next = currentNode;
currentNode->prev = newNode;
return;
}
currentNode = currentNode->next;
}
} else {
newNode->prev = NULL;
newNode->next = NULL;
HEAD = newNode;
}
}
void insertAfter(int key, int value) {
Number *newNode = (Number*) malloc(sizeof(Number));
newNode->number = value;
if (HEAD != NULL) {
Number *currentNode = HEAD;
while (currentNode != NULL) {
if (currentNode->number == key) {
newNode->next = currentNode->next;
newNode->prev = currentNode;
if (currentNode->next != NULL)
currentNode->next->prev = newNode;
currentNode->next = newNode;
return;
}
currentNode = currentNode->next;
}
} else {
newNode->prev = NULL;
newNode->next = NULL;
HEAD = newNode;
}
}
void deleteBeginning() {
if (HEAD != NULL) {
Number *firstNode = HEAD;
HEAD = HEAD->next;
HEAD->prev = NULL;
free(firstNode);
}
}
void deleteEnd() {
if (HEAD != NULL) {
Number *currentNode = HEAD;
while (currentNode->next != NULL)
currentNode = currentNode->next;
currentNode->prev->next = NULL;
free(currentNode);
}
}
void deleteAt(int key) {
if (HEAD != NULL) {
Number *currentNode = HEAD;
while (currentNode != NULL) {
if (currentNode->number == key) {
if (currentNode->next == NULL) {
currentNode->prev->next = NULL;
} else if (currentNode->prev == NULL) {
currentNode->next->prev = NULL;
HEAD = currentNode->next;
} else {
currentNode->prev->next = currentNode->next;
currentNode->next->prev = currentNode->prev;
}
free(currentNode);
return;
}
currentNode = currentNode->next;
}
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: