Как сделать копию связанного списка в C

struct node *copyList(struct node *sourceList)
{
    if(sourceList==NULL) return;
    struct node *targetList=(struct node *) malloc(sizeof(struct node));
    targetList->info=sourceList->info;
    targetList->link=copy(sourceList->link);
    return targetList;
}
crapppy code guy