单链表输出指定位置的元素 求指导~该如何处理

单链表输出指定位置的元素 求指导~
想先输入数 然后得出一个链表(-1是结束标志) 之后再输入一个数表示在链表中的位置 然后把这个位置对应的元素显示出来 程序显示不出这个数 怎么改
#include<stdio.h>
#include<stdlib.h>

#define flag -1

typedef struct Node
{
int data;
struct Node *next;
}*LinkList,LNode;

void jianli(LinkList L)
{
LNode *s,*r;
int x;
scanf("%d",&x);
r=L;
while (x!=flag)
{
s=(LinkList)malloc(sizeof(LNode));
s->data=x;
r->next=s;r=s;
scanf("%d",&x);
}
r->next=NULL;
}

LNode *chazhao(LinkList L,int i)
{
LNode *s;
s=L;
int j=0;
while(s!=NULL&&j<i)
{
s=s->next;
j++;
}
return s;
printf("%d",s->data);
}

void main()
{
LinkList L;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
jianli(L);
printf("输出链表为:");
while(L->next)
{
printf("%d ",L->next->data);
L=L->next;
}
int i;
printf("shuru");
scanf("%d",&i);
*chazhao(L,i);

}
------解决方案--------------------
引用:
Quote: 引用:

while(L->next)
{
printf("%d ",L->next->data);
L=L->next;
}
int i;
printf("shuru");
scanf("%d",&i);
*chazhao(L,i);
输出链表的时候把链表头指针都改了,L不再指向链表头结点了,后面查找的时候还用L会出错的。
另外*chazhao(L,i)有什么特别意义吗?

我也感觉这里好像不对 应该怎么改

用个临时变量,不要改动L的值。L指向你链表的头结点,不要改动它。
LinkList temp=L->next;
while(NULL != temp)
{
    printf("%d ", temp->data);
    temp = temp->next;
}