m0_65112842 2023-03-01 15:43 采纳率: 93.8%
浏览 19
已结题

单链表的输入问题,输入时自动退出

单链表输入数据时自动退出程序
这是哪里出了问题


```c++
#include<iostream>
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<<"已执行"<<endl;
    return OK;
}

void input(LinkList &L)
{
    int n;
    cout<<"请输入一个整数N"<<endl;
    cin>>n;
    cout<<"请输入书籍信息"<<endl;
    LNode *p;//建立一个节点p 
    for(int i=0;i<n;i++)
    {
        cin>>p->data.name>>p->data.num;
        p=L;
        p->next=L->next;
        L->next=p;
    }
    
}
void output(LinkList L)//这不用管先
{
    int n;
    for(int i=0;i<n;i++)
    {
    //    cout<<L->next->data.name<<L->next->data.num;
    }
}
int main()
{
    LinkList L;
    InitList(L);
    input(L);
    return 0;
}

```

  • 写回答

2条回答 默认 最新

  • Web Security Loop 2023-03-01 15:58
    关注

    问题出在nput函数,就是你定义了一个指针p,但是没有为其分配内存,因此访问p的成员时会发生未定义的行为。在循环中应该先为p分配内存,比如通过new关键字:

    
    void input(LinkList &L)
    {
        int n;
        cout<<"请输入一个整数N"<<endl;
        cin>>n;
        cout<<"请输入书籍信息"<<endl;
        for(int i=0;i<n;i++)
        {
            LNode *p = new LNode;
            cin>>p->data.name>>p->data.num;
            p->next=L->next;
            L->next=p;
        }
    }
    
    

    循环中的两行语句的顺序应该交换,应该先将新节点p插入到链表头部,再将L指向新节点,否则会导致链表头指针丢失。

    void input(LinkList &L)
    {
        int n;
        cout<<"请输入一个整数N"<<endl;
        cin>>n;
        cout<<"请输入书籍信息"<<endl;
        for(int i=0;i<n;i++)
        {
            LNode *p = new LNode;
            cin>>p->data.name>>p->data.num;
            p->next=L->next;
            L->next=p;
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月9日
  • 已采纳回答 3月1日
  • 修改了问题 3月1日
  • 创建了问题 3月1日