C++单链表输出时陷入死循环,程序不能自动停止
```c++
#include
using namespace std;
#define OK 1
#define ERROR -1
#define OVERFLOW -2
typedef struct
{
string name;
int num;
}Book;
typedef struct LNode
{
Book data;//节点的数据域
struct LNode *next;//节点的指针域
}LNode,*LinkList;//LinkList为指向结构体LNode的指针类型
int InitList(LinkList &L)
{
L=new LNode;//生成新节点作头节点
L->next=NULL;//令头节点的指针域为空
cout<<"已执行"<return OK;
}
void input(LinkList &L)
{
int n;
cout<<"请输入一个整数N"<>n;
cout<<"请输入书籍信息"<//建立一个节点p
p=new LNode;
for(int i=0;i>p->data.name>>p->data.num;
p=L;
p->next=L->next;
L->next=p;
}
cout<<"输入成功"<void output(LinkList &L)
{
//cout<<"运行没?"<
LinkList p=L;
while(p->next)//下一个节点存在
{
cout<next->data.name<next->data.num<next;
}
}
int main()
{
LinkList L;
InitList(L);
input(L);
output(L);
return 0;
}
```
程序中存在死循环,即程序没有设置正确的退出条件,导致程序一直执行下去,而不能正常结束。为了解决这个问题,可以在程序中设置正确的退出条件,以使程序能够正常结束。
input函数逻辑错误
p=L写早了
导致链头节点的next指向了自身,所以会存在死循环
建议还是先搜一搜链表,代码一大堆,看懂了再写,不要瞎写
这段代码大错
p是刚刚new的节点,然后你又把他指向了L,刚刚new的东西成了垃圾,用指针一定要清楚它指向哪里
p=L;
p->next=L->next;
L->next=p;
```c++
```