weixin_43238639 2018-10-01 07:21 采纳率: 0%
浏览 489

链表的加法重载好像没有返回出来,求大佬指教!

class Node
{
Node *next;
int data;
Node();
Node(int e, Node *p = nullptr):data(e),next(p){}
friend class LinkList;
};
class LinkList
{
private:
Node *head;
int length;//当前长度
public:
LinkList();
LinkList(int a[], int n);
virtual ~LinkList(); ////头结点要设置为空
int GetLength()const;
bool IsEmpty()const;
void Clear();
void Traverse()const;////使用length
LinkList& operator =(const LinkList& L);
LinkList& operator +(const LinkList & L);
void InsertElem(int &e);///插入排序

};
#include"LinkList.h"
#include
#include
using std::cout;
using std::endl;
Node::Node()
{
next = NULL;
data = 0;
}

LinkList::LinkList()
{
head = new Node;
length = 0;

}
LinkList::LinkList(int a[], int n)
{
for(int i=0;i {
for(int j=i+1;j if (a[i] > a[j])
{
int tem;
tem = a[i];
a[i] = a[j];
a[j] = tem;
}
}
head = new Node ;
Node *p=head;
for (int i = 0; i < n; i++)
{
p->next = new Node(a[i],NULL);
assert(p->next);
p = p->next;
}
length = n;
}
void LinkList::Clear()
{
Node *p = head->next;
while (p != NULL)
{
head->next = p->next;
delete p;
p = head->next;
}
}
LinkList::~LinkList()
{
Clear();
delete head;
}
int LinkList::GetLength()const
{
return length;
}
void LinkList::Traverse()const
{
Node *p = this->head;
while (p->next != NULL)
{
cout << p->next->data << " ";
p = p->next;
}
}
LinkList &LinkList::operator =(const LinkList& L)
{
this->length = L.length;
Node *p = this->head;
Node *q = L.head;
for (int i = 0; i < L.length; i++)
{
p->next = q->next;
p = p->next;
q = q->next;
}

return *this;

}
LinkList &LinkList::operator +(const LinkList& L)
{
LinkList tem;
tem.length = this->length + L.length;
Node *t = tem.head;
tem.head->next=t;
Node *p = this->head;
Node *q = L.head;
while (p ->next!= NULL && q ->next!= NULL)
{
if(p->next->data >= q->next->data)
{
t->next = p->next;
p = p->next;
t = t->next;
}
else
{
t->next = q->next;
q = q->next;
t = t->next;
}
}
if (p->next == NULL)
{
t->next = q->next;
}
else
t->next = p->next;
return tem;
}
void LinkList::InsertElem(int &e)
{
Node *q = new Node(e, NULL);
Node *p = this->head;
while (e > p->next->data)
{
p = p->next;
}
q->next = p->next;
p->next = q;
}
#include"LinkList.h"
#include
using namespace std;
int max(int x, int y) {
if (x > y) return x;
else return y;
}
int main()
{
int a[5], b[5];
cout << "请输入五个整数:" << endl;
for (int i = 0; i < 5; i++)
cin >> a[i];
LinkList L1(a, 5);
L1.Traverse();
cout << endl;
cout << "请再次输入五个整数:" << endl;
for (int i = 0; i < 5; i++)
cin >> b[i];
LinkList L2(b, 5);
L2.Traverse();
LinkList L3 = L1 + L2;
L3.Traverse();
system("pause");
return 0;
}

  • 写回答

1条回答 默认 最新

  • JonathanYan 2018-10-01 08:51
    关注

    你没有重载赋值构造函数

     Type a = b+c;//调用的是赋值构造  Type a(b+c);
    
     Type a;
     a = b+c;//这个调用的才是等号重载 a.operator=(b+c);
    
    评论

报告相同问题?

悬赏问题

  • ¥15 一道python难题2
  • ¥15 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备