Skip to content

Instantly share code, notes, and snippets.

@MohamedTaha98
Last active September 17, 2017 22:50
Show Gist options
  • Save MohamedTaha98/423cc6c81dab6605b37a72df55a90d66 to your computer and use it in GitHub Desktop.
Save MohamedTaha98/423cc6c81dab6605b37a72df55a90d66 to your computer and use it in GitHub Desktop.
#include <cs50.h>
#include <stdio.h>
typedef struct dllist {
int n;
struct dllist* prev;
struct dllist* next;
}
dllnode;
dllnode* create_dll(int n) {
dllnode* new = malloc(sizeof(dllnode));
if (new == NULL)
exit(1);
new->n = n;
new->prev = NULL;
new->next = NULL;
return new;
}
dllnode* insert_dll(dllnode* first, int n) {
dllnode* new = malloc(sizeof(dllnode));
if (new == NULL)
exit(1);
new->n = n;
new->next = first;
new->prev = NULL;
first->prev = new;
first = new;
return new;
}
dllnode* target_to_del(dllnode* first, int n) {
dllnode* trav = first;
while (trav != NULL) {
if (trav->n == n)
return trav;
trav = trav->next;
}
return 0;
}
void delete_dllnode(dllnode* target) {
if (target->prev != NULL && target->next != NULL) {
dllnode* prev = target->prev;
dllnode* next = target->next;
prev->next = next;
next->prev = prev;
}
else if (target->prev == NULL && target->next != NULL) {
dllnode* next = target->next;
next->prev = NULL;
}
else if (target->prev != NULL && target->next == NULL) {
dllnode* prev = target->prev;
prev->next = NULL;
}
free(target);
}
int main(void) {
dllnode* new = create_dll(6);
for (int i = 0; i < 6; i++)
new = insert_dll(new, i);
int n = get_int();
dllnode* target = target_to_del(new, n);
delete_dllnode(target);
dllnode* trav = new;
while (trav != NULL) {
printf("%i ", trav->n);
trav = trav->next;
}
printf("\n");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment