C++单链表输出时陷入死循环,程序不能自动停止

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++


```