无头结点单链表尾插法失效,编译无报错,运行终止

无头结点单链表尾插法失效,编译无报错,运行终止

问题描述:

写代码创建无头结点的单链表
为什么无法输出,没有报错,只是输入元素后需要等待很久,然后自动结束了。

####问题遇到的现象和发生背景

问题相关代码,请勿粘贴截图
#include<bits/stdc++.h> 
using namespace std;   
typedef struct LNode{//定义一个单链表 
    int data;    //链表中存放数据 
    struct LNode *next; 
}LNode,*LinkList; //定义单链表类型
 
bool InitList(LinkList &L){//基本初始化一个单链表
    L =(LNode *)malloc(sizeof(LNode)); 
    L=NULL; 
    return true;
    } 
 
void List_Tailsert(LinkList &L){//使用尾插法建立一个单链表
        LNode *p=L; //p指针始终指向链尾元素 
        int e;
        while(scanf("%d",&e)==1){
        
            if(p==NULL){
                p->data=e;
                p->next=NULL;
                }
            else{
                LNode *s=(LinkList) malloc(sizeof(LNode));//申请一个新节点
                s->data=e; //新元素值给s新结点 
                p->next=s;//原来最后一个的指针指向s结点 
                p=s;
                }
        }    //s结点现在为最后一个结点 
        p->next=NULL;//使尾结点指向NULL          
}
 
void Scan_List(LinkList L){//扫描单链表并输出 
    LNode *p=L;
    while(p!=NULL){    
        printf("%d  ",p->data);
        p=p->next;
        }  
    printf("\n"); 
}
 
int main(){      
    LinkList L;    
    InitList(L);
    List_Tailsert(L);
    Scan_List(L);    
    return 0;    
}

运行结果及报错内容

img

我的解答思路和尝试过的方法

调试到尾插法while语句断了

我想要达到的结果

使用带头结点的链表就没有问题,输入什么(a为结束标志),就可以输出什么

img

img

第10行改为L->next=NULL
if(p==NULL){
p->data=e;
p->next=NULL;
}
这判断写反了,应该p!=NULL才干这些啊