document this `C` code:
```C
    void delete(int data, List * list){
      Node * current = list->head;            
      Node * previous = current;           
      while(current != NULL){           
        if(current->data == data){      
          previous->next = current->next;
          if(current == list->head)
            list->head = current->next;
          free(current);
          return;
        }                               
        previous = current;             
        current = current->next;        
      }                                 
    }