不死奇迹 2015-09-06 11:53 采纳率: 33.3%
浏览 2088
已采纳

以一个链表指针作参数传入一个函数里,若此时链表为空,则初始化链表,为什么在主函数中不能用?

#include
using namespace std;

typedef struct Node
{
int age;
struct Node* next;
}LIST;

void addList1(LIST* pHead,int x)//链表结尾加节点
{
LIST* pM=new LIST();//新节点
pM->age=x;
pM->next=NULL;
if(pHead==NULL)
{
cout<<"List is NULL"< cout pHead=new LIST();//重新分配内存,头节点
pHead->age=0;
pHead->next=pM;
}
else
{
LIST* pCur=pHead->next;//当前节点
while(pCur!=NULL)
{
pCur=pCur->next;
}
pCur=pM;
}
}
LIST* CreatList1()//创建节点
{
int data=0;
LIST* Phead=NULL;
LIST* Pm=NULL;
LIST* Pcur=NULL;
cout<<"Enter your data of node (-1 quit):";
scanf("%d", &data);
if(data!=-1)
{
Phead=(LIST*)malloc(sizeof(LIST));
Phead->age=0;
Phead->next=NULL;
Pcur=Phead;
}
while (data!=-1)
{
Pm=new LIST();
Pm->age=data;
Pm->next=NULL;
Pcur->next=Pm;
Pcur=Pcur->next;
cout<<"Enter your data of node (-1 quit):";
cin>>data;
}
return Phead;
}

void ListOut1(LIST* Phead)//输出节点
{
LIST* p=NULL;

if(Phead==NULL)
{
    cout<<"List is NULL\n";
}
else
{
    p=Phead->next;
    while(p!=NULL)
    {
        cout<<p->age<<endl;
        p=p->next;
    }
}

}

void main()
{
LIST* p1=CreatList1();
ListOut1(p1);
addList1(p1,100); //当输入链表为空时,初始化链表
ListOut1(p1); //此时输出为空? 为什么? 我不是在初始化时在堆中分配的内存 不是可以用吗?
system("pause");
}

  • 写回答

6条回答 默认 最新

  • threenewbee 2015-09-06 13:41
    关注
     // ConsoleApplication2.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    
    #include <iostream>
    using namespace std;
    
    typedef struct Node
    {
        int age;
        struct Node* next;
    }LIST;
    
    void addList1(LIST*& pHead, int x)//链表结尾加节点
    {
        LIST* pM = new LIST();//新节点
        pM->age = x;
        pM->next = NULL;
        if (pHead == NULL)
        {
            cout << "List is NULL" << endl;
            cout << "Creat New List" << endl;
            pHead = new LIST();//重新分配内存,头节点
            pHead->age = 0;
            pHead->next = pM;
        }
        else
        {
            if (pHead->next == NULL)
            {
                pHead->age = x;
            }
            else
            {
                LIST* pCur = pHead->next;//当前节点
                while (pCur->next != NULL)
                {
                    pCur = pCur->next;
                }
                pCur->next = pM;
            }
        }
    }
    
    LIST* CreatList1()//创建节点
    {
        int data = 0;
        LIST* Phead = NULL;
        LIST* Pm = NULL;
        LIST* Pcur = NULL;
        cout << "Enter your data of node (-1 quit):";
        scanf_s("%d", &data);
        if (data != -1)
        {
            Phead = (LIST*)malloc(sizeof(LIST));
            Phead->age = 0;
            Phead->next = NULL;
            Pcur = Phead;
        }
        while (data != -1)
        {
            Pm = new LIST();
            Pm->age = data;
            Pm->next = NULL;
            Pcur->next = Pm;
            Pcur = Pcur->next;
            cout << "Enter your data of node (-1 quit):";
            cin >> data;
        }
        return Phead;
    }
    
    void ListOut1(LIST* Phead)//输出节点
    {
        LIST* p = NULL;
    
        if (Phead == NULL)
        {
            cout << "List is NULL\n";
        }
        else
        {
            p = Phead->next;
            while (p != NULL)
            {
                cout << p->age << endl;
                p = p->next;
            }
        }
    
    }
    
    void main()
    {
        LIST* p1 = CreatList1();
        ListOut1(p1);
        addList1(p1, 100); //当输入链表为空时,初始化链表
        ListOut1(p1);      //此时输出为空?  为什么?  我不是在初始化时在堆中分配的内存  不是可以用吗?
        system("pause");
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。