#include
typedef struct node{
int data;
struct node *link;
}LinkNode;
class LinkList
{public:
LinkList(){first=NULL;}//
void makeEmpty();
void input();
void output();
int Length();
LinkNode *Search(int x);
LinkNode *Locate(int i);
void Insert(int i,int x);
bool Remove(int i);
private:
LinkNode *first;
};
void LinkList::makeEmpty(){
LinkNode *q;
while(first!=NULL){//
q=first->link;
first->link=q->link;
delete q;
}
}
void LinkList::input()
{cout<<"请输入一串正整数,输入-1结束。"<
int val;
makeEmpty();
cin>>val;//
last=first=newNode=new LinkNode;//
newNode->data=val;//
while(val!=-1){
newNode=new LinkNode;
if(newNode==NULL) {cout<<"存储分配错误!"<
cin>>val;
newNode->data=val;
}
last->link=NULL;
}
void LinkList::output(){
LinkNode *current=first;
while(current!=NULL){
cout<
}
}
int LinkList::Length(){
//计算带附加结点的单链表的长度
LinkNode *p=first; int count=0;//
while(p!=NULL)
{p=p->link; count++;}
return count-1;
}
LinkNode *LinkList::Search(int x){
LinkNode *current=first;//
while(current!=NULL)
if(current->data==x) break;
else current=current->link;
return current;
}
LinkNode *LinkList::Locate(int i){
if(i<0) cout<<"您输入的地址必须是正整数。"<
while(current!=NULL&&k {current=current->link; k++;}
return current;
}
//插入
void LinkList::Insert(int i,int x){
//将新元素x插入在链表中第i个结点之后
LinkNode *current=Locate(i);
if(current==NULL) cout<<"插入不成功"<
if(newNode==NULL) {cout<<"存储分配错误"<
newNode->link=current->link; //连接在current之后
current->link=newNode;
cout<<"插入成功!"<
//删除
bool LinkList::Remove(int i){
//将链表中的第i个元素删去,通过引用型参数x返回该元素的值
LinkNode *current=Locate(i-1);
if(current==NULL||current->link==NULL) return false;
//删除不成功
LinkNode *del=current->link; //重新拉链,将被删点从链中摘下
current->link=del->link;
i=del->data; delete del; //取出被删结点中的数据
return true;
}
int main()
{LinkList l;
l.input();
cout<<"您输入的单链表的长度是:"<
cout<<"您想在该顺序表中找的数是:";
cin>>b;
cout<<"您想在该顺序表中找的数的地址是:"<
cout<<"您想知道的地址的下标为:";
cin>>c;
cout<<"您想知道的地址为:"<
cout<<"输入您第几的表项之后和要插入的数:";
cin>>d>>e;cout<
cout<<"变化后的单链表为:"<
int f;
cout<<"删除第几个表项:"<
l.Remove(f);
cout<<"变化后的单链表为:"<
return 0;
}
你的代码我看了,是算法欠推敲,我给你改了,你在自己和你的对照一下。