关于C++复杂类LinkedList类的实现构造函数析构函数,代码编译通过了,但没有输出

新手上路,请多包涵

题目描述

运行main函数,看输出(答案应该是0 4 4 8)

题目来源

edu实训课

相关代码(题目中提供的部分)

以下是LinkedList.h的内容
class LinkedList{
public:

//这是单链表节点的结构体
struct Node{
    int data;
    Node *next;
    Node(int a=0,Node *b=nullptr):data(a),next(b){}
};

private:

Node *head;//链表的头结点
int size;  //保存数据的数量,这是一个冗余数据

public:

//默认构造函数,构造一个逻辑为空的链表
LinkedList();
//拷贝构造函数,构造一个逻辑上与参数内容相同的链表
LinkedList(const LinkedList&rhs);
//原生数组构造函数,构造一个内容与给定数组相同的链表
LinkedList(int const a[],int n);
//填充构造函数,构造一个内容为n个value的链表
LinkedList(int n,int value);
//析构函数,一定要自行实现,否则有内存泄漏
~LinkedList();

//无话可说
int getSize()const{return size;}

};

main.cpp的内容如下

include <iostream>

include "LinkedList.h"

using namespace std;

int A[] = {100,200,400,800,1600};
int main(){

LinkedList a,b(A,4);
LinkedList c(b),d(8,6);
cout<<a.getSize()<<" "<<b.getSize()<<" "<<c.getSize()<<" "<<d.getSize()<<endl;
return 0;

}

我写的构造函数和析构函数

include "LinkedList.h"

LinkedList::LinkedList()
{head=nullptr;
size=0;
}
LinkedList::LinkedList(const LinkedList&rhs)
{

Node*p1=head;
p1=new Node;
p1->next=nullptr;
Node*p2=rhs.head->next;
while(p2)
{p1->next=new Node;
 p1=p1->next;
 p1->data=p2->data;
 p1->next=nullptr;
 p2=p2->next;
}       
size=rhs.getSize();

}
LinkedList::LinkedList(int const a[],int n)
{Node*p=head;
Node*temp;
for(int i=0;i<n;i++)
{temp=new Node;
temp->data=a[i];
temp->next=p->next;
p->next=temp;
}
size=n;
}
LinkedList::LinkedList(int n,int value)
{Node*p=head;
Node*temp;
for(int i=1;i<=n;i++)
{temp=new Node;
temp->data=value;
temp->next=p->next;
p->next=temp;
}
size=n;
}
LinkedList::~LinkedList()
{if(size==0)
{delete head;
head=nullptr;
return;
}
while(head->next!=nullptr)
{Node*temp=head;
head=head->next;
delete temp;
}
delete head;
head=nullptr;
size=0;
}
虽然这段代码编译通过了,但是没有输出,想知道原因

阅读 4.2k
1 个回答

复制构造函数和其他两个构造函数内存溢出了

应该有段错误
更新---------------------------

贴出复制构造函数和其他两个初始化构造函数代码,可以参考下

LinkList::LinkList(const LinkList &rll)
{
    struct Node *prll = rll.head;
    struct Node *temp = nullptr,*last = nullptr;
    head = nullptr;
    size = rll.size;
    while(prll != nullptr)
    {
        temp = new Node();
        if(head == nullptr)
        {
            head = temp;
        }
        temp->data = prll->data;
        temp->next = nullptr;
        if(last == nullptr)
        {
            last = temp;
        }
        else
        {
            last->next = temp;
            last = last->next;
        }
        prll = prll->next;
    }
}

LinkList::LinkList(const int a[],int n)
{
    struct Node *temp = nullptr;
    head = nullptr;
    for(int i = n - 1;i >= 0;i--)
    {
        temp = new Node(a[i]);
        if(head == nullptr)
        {
            head = temp;
            head->next = nullptr;
        }
        else
        {
            temp->next = head;
            head = temp;
        }
    }
    size = n;
}

LinkList::LinkList(int n,int value)
{
    struct Node *temp = nullptr;
    head = nullptr;
    for(int i = 0;i < n;i++)
    {
        temp = new Node(value++);
        if(head == nullptr)
        {
            head = temp;
            head->next = nullptr;
        }
        else
        {
            temp->next = head;
            head = temp;
        }
    }
    size = n;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题