Last active
February 20, 2020 03:54
-
-
Save d3x0r/174d53f8241944d0087136218ebbd730 to your computer and use it in GitHub Desktop.
Rewrite with me and next instead of prev
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
// Simple Implentation of Doubly Linked List | |
#include<stdio.h> | |
#include<stdlib.h> | |
//Base struct for the Node | |
typedef struct node{ | |
int value; | |
struct node **me; | |
struct node *next; | |
} node_t; | |
void print_linkedlist(node_t *headnode){ | |
node_t *buffer = headnode; | |
while(buffer != NULL){ | |
printf("%d -", (*buffer).value); | |
buffer = (*buffer).next; | |
} | |
printf("\n"); | |
} | |
node_t* create_new_node(int value){ | |
node_t *result = malloc(sizeof(node_t)); | |
result->value = value; | |
result->next = NULL; | |
result->prev = &result->next; | |
return result; | |
} | |
node_t *insert_at_head(node_t **head, node_t *buffer_node){ | |
buffer_node->next = (head); | |
if( buffer_node->me = head ) | |
(*head)->me = &buffer_node->next; | |
(*head) = buffer_node; | |
return buffer_node; | |
} | |
node_t *fine_mem_node(node_t *head, int value){ | |
node_t *buffer = head; | |
while(buffer!= NULL){ | |
if((*buffer).value==value){return buffer;} | |
buffer = (*buffer).next; | |
} | |
return NULL; | |
} | |
void insert_node_post(node_t *n_neg_node, node_t *new_node){ | |
if( new_node->next = n_neg_node->next ) | |
new_node->next->me = &new_node->next; | |
new_node->me = &n_neg_node->next; | |
n_neg_node->next = new_node; | |
} | |
void remove_node(node_t **head, node_t *node_to_remove){ // When singly linked | |
if( (*node_to_remove->me) = node_to_remove->next ) | |
node_to_remove->next->me = node_to_remove->me; | |
} | |
int main(){ | |
node_t *head = NULL; | |
node_t *buffer; | |
for(int x=0; x<25; x++){ | |
buffer = create_new_node(x); | |
insert_at_head(&head, buffer); | |
} | |
node_t *fount_node = fine_mem_node(head, 6); | |
if(fount_node != NULL){ | |
printf("Found %d in address %p \n\n", fount_node->value, fount_node); | |
insert_node_post(fount_node, create_new_node(445)); | |
}else{ | |
printf("Value not found \n\n"); | |
} | |
print_linkedlist(head); | |
remove_node(&head, fine_mem_node(head, 445)); | |
print_linkedlist(head); | |
return 0; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment