text: #include <stdlib.h>
  
  struct IntrusiveNode {
      struct IntrusiveNode *next;
      struct IntrusiveNode *prev;
  };
  
  struct IntrusiveList {
      struct IntrusiveNode *head;
  };
  
  struct Node {
      int data;
      struct IntrusiveNode *node;
  };
  
  void add_intr_node(struct IntrusiveList *list, struct IntrusiveNode *new_node) {
      new_node->prev = list->head;
      new_node->next = list->head->next;
      new_node->next->prev = new_node;
      list->head->next = new_node;
  }
  
  void add_node(struct IntrusiveList *list, int data) {
      struct Node *new_node = malloc(sizeof(struct Node));
      struct IntrusiveNode *new_intr_node = malloc(sizeof(struct IntrusiveNode));
      new_node->data = data;
      new_node->node = new_intr_node;
      add_intr_node(list, new_intr_node); 
  }
  
  void delete_node(struct IntrusiveList *list, struct Node *dnode) {
      struct IntrusiveNode *intr_node = dnode->node;
      intr_node->prev->next = intr_node->next;
      intr_node->next->prev = intr_node->prev;
      free(dnode); free(intr_node);
  }
  
  int main(int argc, char *argv[])
  {
      
      return 0;
  }
  