#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) {
}
}
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;
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KCnR5cGVkZWYgc3RydWN0IExpc3ROb2RlX3MgewogICAgaW50IHZhbHVlOwogICAgc3RydWN0IExpc3ROb2RlX3MgKm5leHQ7Cn0gTGlzdE5vZGU7CgpMaXN0Tm9kZSAqbGlzdF9wdXNoKExpc3ROb2RlICoqcm9vdCwgaW50IHZhbHVlKQp7CiAgICBMaXN0Tm9kZSAqbm9kZSA9IGNhbGxvYygxLCBzaXplb2YoTGlzdE5vZGUpKTsKICAgIG5vZGUtPnZhbHVlID0gdmFsdWU7CiAgICBub2RlLT5uZXh0ID0gKnJvb3Q7CiAgICAqcm9vdCA9IG5vZGU7CiAgICByZXR1cm4gbm9kZTsKfQoKTGlzdE5vZGUgKmxpc3RfcG9wKExpc3ROb2RlICoqcm9vdCkKewogICAgaWYgKCFyb290IHx8ICEqcm9vdCkgewogICAgICAgIHJldHVybiBOVUxMOwogICAgfQogICAgTGlzdE5vZGUgKm5vZGUgPSAqcm9vdDsKICAgICpyb290ID0gKCpyb290KS0+bmV4dDsKICAgIHJldHVybiBub2RlOwp9Cgp2b2lkIGxpc3RfZGVsZXRlTm9kZShMaXN0Tm9kZSAqbm9kZSkKewogICAgaWYgKG5vZGUpIHsKICAgICAgICBmcmVlKG5vZGUpOwogICAgfQp9Cgp2b2lkIGxpc3RfZGVsZXRlTGlzdChMaXN0Tm9kZSAqbGlzdCkKewogICAgd2hpbGUgKGxpc3QpIHsKICAgICAgICBMaXN0Tm9kZSAqdG9GcmVlID0gbGlzdDsKICAgICAgICBsaXN0ID0gbGlzdC0+bmV4dDsKICAgICAgICBsaXN0X2RlbGV0ZU5vZGUodG9GcmVlKTsKICAgIH0KfQoKZmxvYXQgbGlzdF9hdmcoTGlzdE5vZGUgKmxpc3QpCnsKICAgIGludCBzID0gMCwgbCA9IDA7CiAgICB3aGlsZSAobGlzdCkgewogICAgICAgIHMgKz0gbGlzdC0+dmFsdWU7CiAgICAgICAgbCArPSAxOwogICAgICAgIGxpc3QgPSBsaXN0LT5uZXh0OwogICAgfQogICAgcmV0dXJuIHMgLyAoZmxvYXQpbDsKfQoKaW50IG1haW4oKQp7CiAgICBMaXN0Tm9kZSAqbGlzdCA9IE5VTEw7CiAgICBsaXN0X3B1c2goJmxpc3QsIDEwNzM3NDE4MjQpOwogICAgbGlzdF9wdXNoKCZsaXN0LCAxMDczNzQxODI0KTsKICAgIHByaW50ZigiJWZcbiIsIGxpc3RfYXZnKGxpc3QpKTsKICAgIGxpc3RfZGVsZXRlTGlzdChsaXN0KTsKCiAgICByZXR1cm4gMDsKfQ==