how to change the value of a node in a linked list in c

C
typedef struct node{
    int value; //this is the value the node stores
    struct node *next; //this is the node the current node points to. this is how the nodes link
}node;

node *ammendValue(node *head, int index, int val){
    node *tmp = head;
    int count = 0;

    //if the user enters an index greater then the length of the list
    if(index > len(head)){
        return NULL;
    }

    //if the last value needs editing
    if(index == -1){
        while(count < len(head)-1){
            tmp = tmp->next;
            count += 1;
        }
        tmp->value = val;
        return head;
    }

    //if the first value needs editing
    if(index == 0){
        head->value = val;
        return head;
    }

    //for any other case
    while(count < index){
        tmp = tmp->next;
        count += 1;
    }

    tmp->value = val;
    return head;
}
Source

Also in C: