读书人

C++单链表的有关问题求解救!

发布时间: 2012-10-23 12:12:22 作者: rapoo

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;    }} 

读书人网 >C++

热点推荐