#include <iostream.h>
#include <iomanip.h>
#include "MyList.h"
//无参构造函数
MyList::MyList()
{
head = NULL;
}
//析构函数
MyList::~MyList()
{
NODE *p=head,*q;
if (head == NULL)
return;
else
{
while(p!=NULL)
{
q=p->next;
delete p;
p=q;
}
}
}
//增加一个节点
int MyList::AddNode(int num)
{
NODE *p;
p = head;
head = new NODE;
if (head == NULL)
return -1;
head->num = num;
head->next = p;
return 0;
}
//输出整个链表
void MyList::DisplayList()
{
NODE *p;
int i=0;
cout<<"链表为:"<<endl;
p=head;
while(p!=NULL)
{
cout<<setw(10)<<p->num;
i++;
if(i%10==0)
cout<<endl;
p=p->next;
}
cout<<endl;
}
//定义拷贝构造函数
MyList::MyList(const MyList &src)
{
head=NULL;
NODE *p=src.head;
while(p!=NULL)
{
AddNode(p->num);
p=p->next;
}
}
//前自增
MyList &MyList::operator ++()
{
NODE *p;
p=head;
while(p!=NULL)
{
(p->num)++;
p=p->next;
}
return *this;
}
//后自增
MyList MyList::operator ++(int)
{
MyList m(*this); //调用拷贝构造函数
NODE *p;
p=head;
while(p!=NULL)
{
(p->num)++;
p=p->next;
}
return m; //返回原来链表
}
int MyList::FindNode(int num)
{
NODE *p;
p=head;
while(p!=NULL&&p->num!=num)
p=p->next;
if(p!=NULL) return 1;
else return 0;
}
int MyList::DelNode(int num)
{
NODE *p,*q;
q=p=head;
while(p->num!=num&&p!=NULL)
{
q=p;
p=p->next;
}
if(p!=NULL)
{
q->next=p->next;
if(p==head)
{
head=head->next;
}
delete p;
return 1;
}
else return 0;
}
主函数如下:
#include <iostream.h>
#include "MyList.h"
int main()
{
MyList obj;
obj.AddNode(4);
obj.AddNode(3);
obj.DisplayList();
(obj++).DisplayList();
(++obj).DisplayList();
return 1;
}
运行结果如下:
链表为:
3 4
链表为:
3 4
链表为:
5 6
按照我的程序,主函数中第二次输出结果应该为:
4 3
因为在调用拷贝构造函数时,m的链表结点顺序被我倒了过来。但运行结果却未倒过来。请大家解释一下!
5 个解决方案
#1
(obj++).DisplayList();
obj.DisplayList(); 后obj++;
要不然和前增有什么逻辑上的区别呢
obj.DisplayList(); 后obj++;
要不然和前增有什么逻辑上的区别呢
#2
问题是我在后自增中调用了拷贝构造函数,返回的是新产生的链表m,按照我的程序,m的顺序应该是和原来链表的顺序相反的,但运行结果却未倒过来。问题的焦点不是前自增和后自增的区别!
#3
请高手讨论!
#4
失望,没人回答,给分算了。
#5
你的程序和你想要的结果是一致的!
但你对后缀自增运算符的重载不符合习惯用法。
但你对后缀自增运算符的重载不符合习惯用法。
#1
(obj++).DisplayList();
obj.DisplayList(); 后obj++;
要不然和前增有什么逻辑上的区别呢
obj.DisplayList(); 后obj++;
要不然和前增有什么逻辑上的区别呢
#2
问题是我在后自增中调用了拷贝构造函数,返回的是新产生的链表m,按照我的程序,m的顺序应该是和原来链表的顺序相反的,但运行结果却未倒过来。问题的焦点不是前自增和后自增的区别!
#3
请高手讨论!
#4
失望,没人回答,给分算了。
#5
你的程序和你想要的结果是一致的!
但你对后缀自增运算符的重载不符合习惯用法。
但你对后缀自增运算符的重载不符合习惯用法。