C++单链表的问题求解救!!
做了一天了一直都找不到哪错求解救!!!!
#include<iostream>
using namespace std;
class Node
{public:
int number;
Node *next;
Node()
{
next=NULL;
}
Node(int item,Node *pNext=NULL)
{
number=item;
next=pNext;
}
~Node(){}
};
class LinkList
{
private:
Node *head;
int size;
Node *GetPoiinterOfTheList(int i);
public:
LinkList();
~LinkList();
int GetSize();
void InsertItem(int item,int i);
int DeleteNode(int i);
intGetNode(int i);
void Test();
};
LinkList::LinkList()
{
head=new Node();
head->next=NULL;
size=0;
}
LinkList::~LinkList()
{
Node *p,*q;
p=head;
while(p!=NULL)
{
q=p;
p=p->next;
delete q;
}
size=0;
head=NULL;
}
Node *LinkList::GetPoiinterOfTheList(int i)
{
if(i<0||i>size)
{
cout<<"EORRO:OUT OF RANGE"<<endl;
return NULL;
}
else if(i==0)
return head;
else
{Node *p=head->next;
int j=1;
while(p!=NULL&&j<i)
{
p=p->next;
i++;
}
return p;
}
}
int LinkList::GetSize()
{
return size;
}
void LinkList::InsertItem(int item,int i)
{
if(i<0||i>size+1)
{
cout<<"ERROR:OUT OF RANGE"<<endl;
}
else
{
Node *p=GetPoiinterOfTheList(i-1);
Node *q=new Node(item,p->next);
p->next=q;
size++;
}
}
int LinkList::DeleteNode(int i)
{
if(size==0)
{
cout<<"ERROR:List is already empty,cannot be deleted"<<endl;
return 1;
}
if(i<0||i>size)
{
cout<<"EORRO:OUT OF RANGE"<<endl;
return 1;
}
Node *s,*p=GetPoiinterOfTheList(i-1);
s=p->next;
p->next=p->next->next;
int temp=s->number;
delete s;
size--;
return temp;
}
int LinkList::GetNode(int i)
{
if(i<0||i>size)
{
cout<<"EORRO:OUT OF RANGE"<<endl;
return 1;
}
Node *p=GetPoiinterOfTheList(i);
return p->number;
}
void LinkList::Test()
{
cout<<head<<endl;
cout<<head->next<<endl;
cout<<head->number<<endl;
}
int main()
{
int i,temp;
LinkList mylist;
mylist.Test();
int len,item,insertposition,deleteposition,getposition;
cin>>len;
for(i=1;i<=len;i++)
{
cin>>temp;
mylist.InsertItem(temp,i);
}
for(i=1;i<=mylist.GetSize();i++)
cout<<mylist.GetNode(i)<<" ";
cout<<endl;
cin>>item>>insertposition;
mylist.InsertItem(item,insertposition);
for(i=1;i<=mylist.GetSize();i++)
cout<<mylist.GetNode(i)<<" ";
cout<<endl;
cin>>deleteposition;
mylist.DeleteNode(deleteposition);
for(i=1;i<=mylist.GetSize();i++)
cout<<mylist.GetNode(i)<<" ";
cout<<endl;
cin>>getposition;
cout<<mylist.GetNode(getposition);
cout<<endl;
return 0;
}
[解决办法]
- C/C++ code
Node *LinkList::GetPoiinterOfTheList(int i){ if(i<0||i>size) { cout<<"EORRO:OUT OF RANGE"<<endl; return NULL; } else if(i==0) return head; else {Node *p=head->next; int j=1; while(p!=NULL&&j<i) { p=p->next; j++;//此处错误,原来是i++改成j++ } return p; }}