单链表类问题(包含了运算符重载)
单链表类实现如下:
#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的链表结点顺序被我倒了过来。但运行结果却未倒过来。请大家解释一下!
[解决办法]
(obj++).DisplayList();
obj.DisplayList(); 后obj++;
要不然和前增有什么逻辑上的区别呢