请问该单链表的输入函数input该怎么改正?

如图,想用单链表实现一个隐私管理系统,其中有一个功能是直接往单链表中输入数据,但不知道为什么输入完之后程序就卡住了,求大神解答
(出问题的是input函数,)

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define maxsize 100
typedef struct{
    int num;
    char place[50];
    char like[100];
    char name[50];
    char pass[50];
}mess;
typedef struct Lnode{
    mess data;
    struct Lnode *next;
}linklist;
//定义
void input(linklist *&L,int n,int length)//问题函数,在switch语句引用时无法正常退出
{
    linklist *s;
    s=(linklist*)malloc(sizeof(linklist));
    int i;
    for(i=1;i<=n;i++)
    {
        s->data.num=length+i;
        scanf("%s",s->data.place);
        scanf("%s",s->data.like);
        scanf("%s",s->data.name);
        scanf("%s",s->data.pass);
        s->next=L->next;
        L->next=s; 
    }   
    printf(">>>>>录入成功!\n");
}
void input(linklist *&L,int n,int length)//问题函数,在switch语句引用时无法正常退出
{
    linklist *s;
    s=(linklist*)malloc(sizeof(linklist));
        s->next = NULL;
                L->next=s; 
    int i;
    for(i=1;i<=n;i++)
    {
        s->data.num=length+i;
        scanf("%s",s->data.place);
        scanf("%s",s->data.like);
        scanf("%s",s->data.name);
        scanf("%s",s->data.pass);
        s->next=(linklist*)malloc(sizeof(linklist));
s = s->next;
        s->next = NULL;
    }   
    printf(">>>>>录入成功!\n");
}