在不弄单链表长度情况下,为什么没有逆转成功?

#include<stdio.h>

#include<stdlib.h>

#define OK 1

#define ERROR -1

typedef int Status;

typedef int ElemType;

typedef struct LNode{

ElemType data;

struct LNode *next;

}LNode,*LinkList;

Status InitList(LinkList &L){

L = new LNode;

L->next = NULL;

return OK;

}

void CreateList(LinkList &L,int m){

LinkList t;

printf("请输入数值:");

for(int p = 0 ; p < m ; p++){

    t = new LNode;

    scanf("%d",&t->data);

    t->next = L->next;

    L->next = t;

}

}

void CreateList_1(LinkList &L){

LinkList t;

ElemType data;

printf("");

while (1){

      if (scanf("%d",&data) == 1){

          t = new LNode;

          t->data = data;

          t->next = L->next;

          L->next = t;

      }

      if ((getchar()) == '\n') break; 

}

}
void Inverse(LinkList& L)
{
LinkList p, q;
q = L;
p = NULL;
while (q != NULL)
{
p = q;
q = q->next;
p->next = L;
L = p;

}

}

void showList(LinkList L)
{
LinkList p = L;
while (p->next) {
printf("%d ", p->next->data);
p = p->next;
}
printf("\n");
}

int main(){

int n;

LinkList L,L1;   

InitList(L1);     

CreateList_1(L1);

Inverse(L1); 
  
showList(L1); 
return 0;

}

img

供参考:

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR -1
typedef int Status;

typedef int ElemType;

typedef struct LNode{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

Status InitList(LinkList &L){
    L = new LNode;
    L->next = NULL;
    return OK;
}

void CreateList(LinkList &L,int m){//头插法生成链表
    LinkList t;
    printf("请输入数值:");
    for(int p = 0 ; p < m ; p++){
        t = new LNode;
        scanf("%d",&t->data);
        t->next = L->next; //头插法
        L->next = t;
    }
}

void CreateList_1(LinkList &L){ //头插法生成链表
    LinkList t;
    ElemType data;
    printf("");
    while (1){
      if (scanf("%d",&data) == 1){
          t = new LNode;
          t->data = data;
          t->next = L->next;   //头插法
          L->next = t;
      }
      if ((getchar()) == '\n') break;
    }
}
void Inverse(LinkList& L) //带头结点链表 逆置
{
    LinkList p, q;
    q = L->next;   //修改
    p = NULL;
    L->next = NULL;//修改
    while (q != NULL)
    {
        p = q;
        q = q->next;
        p->next = L->next; //修改
        L->next = p;       //修改
    }
}

void showList(LinkList L)
{
    LinkList p = L;
    while (p->next) {
        printf("%d ", p->next->data);
        p = p->next;
    }
    printf("\n");
}

int main(){
    int n;
 
    LinkList L,L1;

    InitList(L1);  //初始化 创建头结点

    CreateList_1(L1); // 创建链表
    printf("逆置前链表:");
    showList(L1);     //输出链表看看

    printf("逆置后链表:");
    Inverse(L1);      //逆置链表
    showList(L1);     //逆置后链表看看
  
    return 0;
}