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日

悬赏问题

  • ¥15 Python程序,深度学习,有偿私
  • ¥15 扫描枪扫条形码出现问题
  • ¥35 poi合并多个word成一个新word,原word中横版没了.
  • ¥15 【火车头采集器】搜狐娱乐这种列表页网址,怎么采集?
  • ¥15 求MCSCANX 帮助
  • ¥15 机器学习训练相关模型
  • ¥15 Todesk 远程写代码 anaconda jupyter python3
  • ¥15 我的R语言提示去除连锁不平衡时clump_data报错,图片以下所示,卡了好几天了,苦恼不知道如何解决,有人帮我看看怎么解决吗?
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开