单向链表代码问题,看不懂

大佬们这里看不懂了麻烦能帮注释下吗、

void creat_user_list(char* name, char* password, char* ID)  //创建用户链表
{
    User* np = (User*)malloc(sizeof(User));//分配变量空间
    np = user_head;
    while (np->next) np = np->next;
    User* tp = (User*)malloc(sizeof(User));
    strcpy(tp->user_name, name);
    strcpy(tp->password, password);
    strcpy(tp->ID, ID);
    tp->admin = 0;
    tp->next = NULL;
    user_initi(tp);
    np->next = tp;
    save();
}

你这个存在内存泄漏?注释那一行要Malloc做什么?整个程序的意思感觉是添加一个用户信息到链表末尾。