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

typedef struct ListNode_s {
    int value;
    struct ListNode_s *next;
} ListNode;

ListNode *list_push(ListNode **root, int value)
{
    ListNode *node = calloc(1, sizeof(ListNode));
    node->value = value;
    node->next = *root;
    *root = node;
    return node;
}

ListNode *list_pop(ListNode **root)
{
    if (!root || !*root) {
        return NULL;
    }
    ListNode *node = *root;
    *root = (*root)->next;
    return node;
}

void list_deleteNode(ListNode *node)
{
    if (node) {
        free(node);
    }
}

void list_deleteList(ListNode *list)
{
    while (list) {
        ListNode *toFree = list;
        list = list->next;
        list_deleteNode(toFree);
    }
}

float list_avg(ListNode *list)
{
    int s = 0, l = 0;
    while (list) {
        s += list->value;
        l += 1;
        list = list->next;
    }
    return s / (float)l;
}

int main()
{
    ListNode *list = NULL;
    list_push(&list, 1073741824);
    list_push(&list, 1073741824);
    printf("%f\n", list_avg(list));
    list_deleteList(list);

    return 0;
}