把数据插入链表,再打印,中间有其他语句时,则打印出了一个很奇怪的数,这是为什么?
Evenlist.cpp
Evenlist::Evenlist()
{
head=new evNode;
head->next=NULL;
}
Evenlist::~Evenlist()
{
evNode *p =head;
while (p)
{
evNode *q = p;
p = p->next;
delete q;
}
}
bool Evenlist::isEmpty()
{
if(head->next==NULL)
return true;
else
return false;
}
void Evenlist::addNode(evNode ev)//有序插入
{
evNode*p,*q;
evNode*pev=&ev;
q=head;
p=head->next;
if(head->next==NULL){
head->next=pev;
cout<<"插在空链表的尾部:"<<endl;
cout<<head->next->occurtime<<" "<<head->next->ntype;
}
else{
while(p!=NULL){
if(pev->occurtime<p->occurtime){
q->next=pev;
pev->next=p;
cout<<"插在中间"<<endl;
break;
}
else{
q=p;
p=p->next;
}
}
q->next=pev;
cout<<"插在尾部:"<<endl;
}
bool Evenlist::deleteNode(evNode*firstEv)
{
if(isEmpty()){
return false;
}
else
{
// firstEv=head->next;
head->next=firstEv->next;
delete firstEv;
cout<<"成功删除";
return true;
}
}
void Evenlist::displayNode()
{
int i=0;
evNode *p ;
p=head->next;
if(isEmpty())
cout<<"该链表为空"<<endl;
while(p!=NULL)
{
i++;
cout<<"第"<<i<<"个事件";
cout << "(" <<p->occurtime<< ", "<<p->ntype<<") ";
p = p->next;
}
cout << endl;
}
int main()
{
evNode evltem;
Evenlist evList;
evltem.occurtime=0;evltem.ntype=-1;evltem.next=NULL;//初始化evltem
evList.addNode(evltem);
cout<<"打印链表"<<endl;//当有这个语句时输出很奇怪的数,没有时则能正确输出
evList.displayNode();
return 0;
}
Evenlist.h
typedef struct evnode{
int occurtime;
int ntype;//事件类型
struct evnode*next;
}evNode;
class Evenlist
{
private:
evNode *head;
public:
Evenlist();
virtual ~Evenlist();
bool isEmpty();
void addNode(evNode ev);
bool deleteNode(evNode*firstEv);
void displayNode();
};
这是打印错误的截图
1.
正确是会打印出(0,-1)