题目描述
运行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;
}
虽然这段代码编译通过了,但是没有输出,想知道原因
复制构造函数和其他两个构造函数内存溢出了
应该有段错误
更新---------------------------
贴出复制构造函数和其他两个初始化构造函数代码,可以参考下