链表排序,为啥我输出不了值?

#include
#include
using namespace std;

#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct LNode {
ElemType data; //结点的数据域
struct LNode *next; //结点的指针域
} LNode, *LinkList; //LinkList为指向结构体LNode的指针类型

void CreateList_R(LinkList &L, int n) //算法2.12 后插法创建单链表
{

L=new LNode;

L->next=NULL;
LNode*r=L;
for(int i=1;i<=n;i++){
LinkList p=new LNode;
cin>>p->data;
p->next=NULL;r->next=p;
r=p;
}
}

void ListSort(LinkList &L)
{
LNode* p=L->next,* q=L,* r;
int i=0,j,k,n,f=0;
while(p){
p=p->next;
i++;
}
p=L->next;
for(j=1;j<=i;j++){
f=0;
while(p){
if(p->data>p->next->data){
r=p->next->next;
q->next=p->next;
p->next->next=p;

    p->next=r; 
    q=p;p=p->next; 
    f=1;
   }
   else{
       q=p;
    p=p->next;
   }

}
if(!f){
break;
}
q=L;
p=L->next;
}
}

void ListPrint(LinkList L)
{
LNode *p;
for(p = L->next; p; p = p->next)
cout << p->data << (p->next ? ' ' : '\n');
}

int main()
{
LinkList L;
int n;

cin >> n;
CreateList_R(L, n);
ListSort(L);
ListPrint(L);
}

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