咋会出现这样的错误?

#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
char letter;
struct LNode *next;
}LNode,*Linklist;
Linklist list_TailInsert(Linklist &L)
{
L = (Linklist)malloc(sizeof(LNode));
LNode *head = L,*rear = L;
L->next = NULL;
L->letter = NULL;
int x,i=0;
printf("请输入单链表结点的个数:");
scanf("%d",&x);
for(i; i < x; i++)
{
char letter;
printf("i = %d\n",i);

    printf("请输入结点的字母:\n");
    scanf("%c",&letter);
    printf("%c\n",letter);
    LNode *s;
    s = (Linklist)malloc(sizeof(LNode));
    s->letter = letter;
    rear->next = s;
    s->letter = letter;
    rear = s;
 } 
 rear->next = NULL;

}
void Display(Linklist &L)
{
LNode *p = L->next;
while(p != NULL)
{
printf("%c ",p->letter);
p = p->next;
}
printf("\n");
}
int main()
{
Linklist L1;
list_TailInsert(L1);
Display(L1);
return 0;
}

img

供参考:

#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
     char letter;
     struct LNode *next;
}LNode,*Linklist;

Linklist list_TailInsert(Linklist &L)
{
     L = (Linklist)malloc(sizeof(LNode));
     LNode *head = L,*rear = L;
     L->next = NULL;
     L->letter = NULL;
     int x,i=0;
     printf("请输入单链表结点的个数:");
     scanf("%d",&x);
     for(i; i < x; i++)
     {
         char letter;
         printf("i = %d\n",i);
         printf("请输入结点的字母:\n");
         getchar();
         scanf("%c",&letter);
         printf("%c\n",letter);
         LNode *s;
         s = (Linklist)malloc(sizeof(LNode));
         s->letter = letter;
         rear->next = s;
         //s->letter = letter;
         rear = s;
     }
     rear->next = NULL;
}
void Display(Linklist &L)
{
    LNode *p = L->next;
    while(p != NULL)
    {
         printf("%c ",p->letter);
         p = p->next;
    }
    printf("\n");
}
int main()
{
    Linklist L1;
    list_TailInsert(L1);
    Display(L1);
    return 0;
}

这个问题很巧妙^-^,
你只要把scanf("%c", &letter);改成scanf(" %c", &letter);也就是在%c前面敲一个空格就好了
scanf("%c",&c) 与 scanf(" %c",&c)的区别参考这里:链接标题