下面这个用C++实现单链表的程序哪里有问题啊?编译连接也可以运行,但是运行结果是错的

2025-01-05 15:23:05
推荐回答(1个)
回答1:

#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结束。"< LinkNode *newNode,*last;
int val;
makeEmpty();
cin>>val;//
last=first=newNode=new LinkNode;//
newNode->data=val;//
while(val!=-1){
newNode=new LinkNode;
if(newNode==NULL) {cout<<"存储分配错误!"< last->link=newNode; last=newNode;
cin>>val;
newNode->data=val;
}
last->link=NULL;
}

void LinkList::output(){
LinkNode *current=first;
while(current!=NULL){
cout<data< current=current->link;
}
}

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<<"您输入的地址必须是正整数。"< LinkNode *current=first; int k=0;
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<<"插入不成功"<LinkNode *newNode=new LinkNode;
if(newNode==NULL) {cout<<"存储分配错误"<newNode->data=x;
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<<"您输入的单链表的长度是:"< int b;
cout<<"您想在该顺序表中找的数是:";
cin>>b;
cout<<"您想在该顺序表中找的数的地址是:"< int c;
cout<<"您想知道的地址的下标为:";
cin>>c;
cout<<"您想知道的地址为:"< int d,e;
cout<<"输入您第几的表项之后和要插入的数:";
cin>>d>>e;cout< l.Insert(d,e);
cout<<"变化后的单链表为:"< l.output();
int f;
cout<<"删除第几个表项:"< cin>>f;
l.Remove(f);
cout<<"变化后的单链表为:"< l.output();
return 0;
}
你的代码我看了,是算法欠推敲,我给你改了,你在自己和你的对照一下。