p、q两个指针的while循环那里,不输出,不知道怎么回事?

想试一试找链表的中间结点,代码的第二个while循环后有一个输出,可是运行结果中没有输出cout>>p->data这一语句,想让他输出

#include<iostream> 
#include<malloc.h>
using namespace std;
typedef struct LNode{
    char data;
    struct LNode *next;
}LNode,*LinkList;
LinkList List_TailInsert(LinkList &L){
    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL; //这一句不写也没事,但头插法必须要写 
    LNode *s,*r=L;//指向表尾 
    char x;
    cin>>x;
    while(x!='z'){
        s=(LNode *)malloc(sizeof(LNode));
        s->data=x;
        r->next=s;
        r=s;
        cin>>x;
    }
    r->next=NULL;
    return L;
} 
int main(){
    LinkList L;
    List_TailInsert(L);
    LNode *p,*q=L;
    LNode *h=L->next;
    while(h!=NULL){
        cout<<h->data;
        h=h->next;
    }
    while(q->next!=NULL){
        p=p->next;
        q=q->next;
        if(q->next!=NULL)
            q=q->next;
    }
    cout<<p->data;
} 

img

34行,p=p->next,你上面p都没有赋值啊
LNode *p,*q=L; 这只是将L赋值给q,p没有初始化

数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633