链表转置问题,求大神看看哪错了

图片说明
linklist listtranspose(linklist L)
{
linklist r,t,s;
while(!L||!(L->next))
return L;
r=L;
s=r->next;
t=s->next;
L->next=NULL;
while(t!=NULL)
{
s->next=r;
r=s;
s=t;
t=t->next;
}
s->next=r;
return s;
}
int main(void)
{
int n,x,y;
linklist L;
printf("输入链表长度:");
scanf("%d",&n);
printf("输入链表:\n");
L=createlist(n);
listtranspose(L);
printflist(L);
return 0;
}

看不到完整代码,楼主先试试下面的,不行的话贴上完整代码
或者自己单步调试
PS:单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

 linklist listtranspose(linklist L)
{
    linklist r,t,s;
    while(!L||!(L->next))
        return L;
    r=NULL;
    t=L->next;
    while(t!=NULL)
    {
        s = t->next;
        t->next = r;
        r=t;//移动指针
        t=s;
    }
    L->next=r;
    return L;
}