@C语言大神,按序号i查找链表中的元素,第46行为啥有断点错误~~???求解释

include

include

typedef struct Node
{
char data;
struct Node *next;
}Node,*Linklist;

Linklist Createfromhead()//建立链表
{
Linklist L;Node*s;int flag=1;char c;
L=(Linklist)malloc(sizeof(Node));
L->next=NULL;

while(flag)
{
 c=getchar();
 if(c!='$')
 {
    s=(Node*)malloc(sizeof(Node));
    s->data=c;
    s->next=L->next;
    L->next=s;
 }
 else
 flag=0;
}


do{
    printf("%c,\n",L->data);
    L=L->next ;
}while(L!=NULL);


return L;

}

Node* search(int k)//按照序号i查找元素
{
Node*p;int j=0;Linklist L;
p=L;
j++;
p=p->next;//先来一步,使得(p->next)!=NULL

while((j<k)&&((p->next)!=NULL))
{
    j++;
    p=p->next;
}

if(j==k) {printf("%c\n",p->data);return p;} 
 else    {printf("NO\n");return NULL;}

}

int main()
{

int i;
Createfromhead();
printf("input the order i:\n");
scanf("%d",&i);
search(i);
getch();

}


 scanf("%d",&i);
search(i);
getch();    

}


 scanf("%d",&i);
search(i);
getch();    

}

你的L这个变量在Createfromhead方法中就已经指向了最后一个元素的next,已经为NULL了,还有就是search需要传入你的链表的头指针。
参考下面的代码吧

 typedef struct Node
{
    char data;
    struct Node *next;
}Node,*Linklist;

Linklist Createfromhead()//建立链表 
{
    Linklist L;Node*s;int flag=1;char c;
    L=(Linklist)malloc(sizeof(Node));
    L->next=NULL;
    while(flag)
    {
        c=getchar();
        if(c!='$')
        {
            s=(Node*)malloc(sizeof(Node));
            s->data=c;
            s->next=L->next;
            L->next=s;
        }
        else
            flag=0;
    }

    Linklist p = L;
    do
    {
        printf("%c,\n",L->data);
        L=L->next ;
    }while(L!=NULL);


    return p;
}

Node* search(int k, Linklist L)//按照序号i查找元素 
{
    Node*p;int j=0;
    p=L;
    j++;
    p=p->next;//先来一步,使得(p->next)!=NULL
    while((j<k)&&((p->next)!=NULL))
    {
        j++;
        p=p->next;
    }

    if(j==k) {printf("%c\n",p->data);return p;} 
    else    {printf("NO\n");return NULL;}
}

int main()
{
    int i;
    Linklist L = Createfromhead();
    printf("input the order i:\n");
    scanf("%d",&i);
    search(i, L);
    getch();
    return 0;
}