C Data Structure : Linked List Back Operations

#include <stdlib.h>
#include <stdio.h>

/**
 * Author: Ozan Özenoğlu
 * Date : 10/10/2020
 * */

struct linked_list_node {
    struct linked_list_node *next;
    int val;
};
typedef struct linked_list_node linked_list_node_t;


struct linked_list {
    int size;
    linked_list_node_t *head;
};

typedef struct linked_list linked_list_t;

void init(linked_list_t *list){
    list->size = 0;
    list->head = (void*)0;
    printf("linked list init completed\n");
}

void add_back(linked_list_t *list , int val) {
    linked_list_node_t *node = malloc(sizeof(linked_list_node_t)* 1);
    node->val = val;
    list->size ++;
    linked_list_node_t *head = list->head;
    if(head == (void*)0) {
        list->head = node;
    } else {
        while(head->next != (void*)0) {
            head = head->next;
        }
        head->next = node;
    }
    printf("Added %d\n",val);
}

int get_back(linked_list_t *list) {
    if(list->size == 0) {
        return -1;
    }
    linked_list_node_t *head = list->head;
    linked_list_node_t *prev = head;
    while(head->next != (void*)0) {
        prev = head;
        head = head->next;
    }
    int result = head->val;
    free(head);
    if(prev != head) {
        prev->next = (void*)0;
    } else {
        list->head = (void*)0;
    }
    list->size--;
    return result;
}



int main() {

    linked_list_t my_list;
    init(&my_list);
    add_back(&my_list, 1);

    printf("%d \n",get_back(&my_list));
    printf("%d \n",get_back(&my_list));
    printf("%d \n",get_back(&my_list));
    printf("%d \n",get_back(&my_list));
    printf("%d \n",get_back(&my_list));
    printf("%d \n",get_back(&my_list));
    printf("%d \n",get_back(&my_list));
    printf("%d \n",get_back(&my_list));
    printf("%d \n",get_back(&my_list));

    add_back(&my_list, 1);
    add_back(&my_list, 2);
    add_back(&my_list, 3);
    add_back(&my_list, 4);
    add_back(&my_list, 5);
    add_back(&my_list, 6);

    
    printf("%d \n",get_back(&my_list));
    printf("%d \n",get_back(&my_list));
    printf("%d \n",get_back(&my_list));
    printf("%d \n",get_back(&my_list));
    printf("%d \n",get_back(&my_list));
    printf("%d \n",get_back(&my_list));
    printf("%d \n",get_back(&my_list));
    printf("%d \n",get_back(&my_list));
    printf("%d \n",get_back(&my_list));


    return 0;
}

Leave a Reply

Your email address will not be published. Required fields are marked *