带头单链表怎么逆序输出

img


程序运行到puts就停止了
问题遇到的现象和发生背景

问题相关代码,请勿粘贴截图

#include<stdio.h>
#include<stdlib.h>

typedef struct Lnode{
int data;
struct Lnode *next;
}LinkList;

LinkList CreateList_L(LinkList *&L,int a[],int n)
{
int i;
LinkList *s,head;
head=(LinkList
)malloc(sizeof(LinkList));
head->next=NULL;
for(i=0;i<n;i++)
{
s=(LinkList*)malloc(sizeof(LinkList));
s->data =a[i];
s->next =head->next;
head->next=s;
}
return *head;
}

void replaceList_L(LinkList *&L)
{
LinkList *right=L;
LinkList *left=NULL;
LinkList *now;
while(right!=NULL)
{
now=right;
right=right->next ;
now->next =left;
left=now;
}
}

void print(LinkList *&L)
{

puts("print ");
while(L->next !=NULL)
{
    printf("%d ",L->data);
    L=L->next;
    puts("ok"); 
 }
 puts("no");

}

int main()
{
LinkList *list;
int num[5],i;
for(i=0;i<5;i++)
{
scanf("%d",&num[i]);
}
CreateList_L(list,num,5);
print(list);
replaceList_L(list);
print(list);
}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

img

img

修改处见注释,供参考:

#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode{
    int    data;
    struct Lnode *next;
}LinkList;
void  CreateList_L(LinkList *&L,int a[],int n)
//LinkList* CreateList_L(LinkList *&L,int a[],int n)
{
    int i;
    LinkList *s,*head;
    L=(LinkList*)malloc(sizeof(LinkList));
    L->next=NULL;
    head = L;
    for(i=0;i<n;i++)
    {
        s=(LinkList*)malloc(sizeof(LinkList));
        s->next =NULL;
        s->data =a[i];
        head->next = s; //s->next =head->next;
        head =s;        //head->next=s;
    }
                        //return head;
}

void replaceList_L(LinkList *&L)
{
    LinkList *right=L->next;
    L->next = NULL; //LinkList *left=NULL;
    LinkList *now;
    while(right!=NULL)
    {
        now=right;
        right=right->next ;
        now->next =L->next;//now->next =left;
        L->next =now;      //left=now;
    }
}
void print(LinkList *L)
//void print(LinkList *&L)
{
    puts("print ");
    while(L->next !=NULL)
    {
        printf("%d ",L->next->data); //printf("%d ",L->data);
        L=L->next;
               //puts("ok");
    }
    puts("\n");//puts("no");
}

int main()
{
    LinkList *list;
    int num[5],i;
    for(i=0;i<5;i++)
    {
       scanf("%d",&num[i]);
    }

    CreateList_L(list,num,5);
    print(list);

    replaceList_L(list);
    print(list);

    return 0;
}

逆序输出可以用递归,比较简单
你到底是只需要逆序输出,还是要将链表节点逆序后再输出?