Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * list.cpp
- *
- * Created on: 03/mar/2015
- * Author: andrea
- */
- #include "list.h"
- typedef struct node {
- struct node* prev;
- struct node* next;
- int value;
- } node;
- typedef struct list {
- struct node* head;
- struct node* end;
- int size;
- } list;
- struct list* newList(){
- list* l = malloc(sizeof(list));
- l->head = NULL;
- l->end = NULL;
- return l;
- }
- struct node* newNode(int value){
- node* n = malloc(sizeof(node));
- n->next = NULL;
- n->prev = NULL;
- n->value = value;
- return &n;
- }
- int addAfter(list* list, node* __new, node* prev){
- if ((list == NULL) || (node == NULL)){
- return -1;
- }
- if (list->head == NULL){ // Lista vuota
- list->head = node;
- list->end = node;
- __new->prev = NULL;
- __new->next = NULL;
- } else if (prev == NULL){ // In cima alla lista
- __new->next = list->head;
- __new->prev = list->head;
- list->head->prev = __new;
- list->head = __new;
- } else if (prev == list->end){ // In fondo alla lista
- __new->next = NULL;
- __new->prev = list->end;
- list->end->next = __new;
- list->end = __new;
- } else {
- __new->next = prev->next;
- __new->prev = prev;
- prev->next = __new;
- __new->next->prev = __new;
- }
- list->size++;
- return 0;
- }
- int addBefore(list* list, node* __new, node* next){
- if ((list == NULL) || (node == NULL)){
- return -1;
- }
- node* prev = NULL;
- if (next == NULL){
- prev = list->end;
- } else if (next == list->head){
- prev = NULL;
- } else {
- prev = next->prev;
- }
- return addAfter(list, __new, prev);
- }
- int removeNode(list* list, node* node){
- if (list == NULL || node == NULL){
- return -1;
- }
- if (node == list->head && node == list->end){
- list->head = NULL;
- list->end = NULL;
- } else if (node == list->head){ // Rimuovere primo elemento
- list->head = node->next;
- node->next->prev = list->head;
- } else if (node == list->end){ // Rimuovere l'ultimo elemento
- list->end = node->prev;
- node->prev->next = NULL;
- } else { // Rimuovere un nodo nel mezzo della lista
- node->prev->next = node->next;
- node->next->prev = node->prev;
- }
- free(node);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement