无头结点单链表尾插法失效,编译无报错,运行终止
问题描述:
写代码创建无头结点的单链表
为什么无法输出,没有报错,只是输入元素后需要等待很久,然后自动结束了。
####问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
#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;
}
运行结果及报错内容
我的解答思路和尝试过的方法
调试到尾插法while语句断了
我想要达到的结果
使用带头结点的链表就没有问题,输入什么(a为结束标志),就可以输出什么
答
第10行改为L->next=NULL
if(p==NULL){
p->data=e;
p->next=NULL;
}
这判断写反了,应该p!=NULL才干这些啊