C++单链表,删除一个结点~~怎么删不了喔?

用c-free做的,可以运行,但问题出在:执行删除时,要删除的那个结点没有删掉,但变成了0.而且长度也没有变化实在不懂~~求各位大侠帮忙……#include<iostre... 用c-free做的,可以运行,但问题出在:执行删除时,要删除的那个结点没有删掉,但变成了0.而且长度也没有变化
实在不懂~~
求各位大侠帮忙……

#include<iostream>
using namespace std;

class link
{
public:
int data; link *next;
//---------------------------------------头插法建立带头节点的单链表
link *hhcreat(int n)
{
link *s,*p; p=new link; //开辟空间
p->next=NULL;
for(int i=1;i<=n;i++)
{
s=new link;
cin>>s->data;
s->next=p->next;
p->next=s;
}
return p; //回到头节点p
}
//---------------------------------------单链表的输出
void print(link *head)
{
link *p;
p=head->next;
while(p->next!=NULL) //输出元素,除最后一个
{
cout<<p->data<<"->";
p=p->next;
}
cout<<p->data; //输出最后一个元素
cout<<endl;
}
//-----------------------------------------按位置删除
void Del(link *head,int i)
{
link *p; p=head->next;
link *q;
int j; j=1;
while((p!=NULL)&&(j<i))
{
j++;
p=p->next;
}
if(p==NULL) cout<<"要删除的结点不存在";
else
{
q->next=p->next;
delete(p);
}
}
//-------------------------------------------链表长度
int len(link *head)
{
link *p;
p=head->next;
int i=1;
while(p->next!=NULL)
{
i++;
p=p->next;
}
cout<<i<<endl;
}
};

void main()
{

cout<<"指定链表结点个数:";
int m; cin>>m; cout<<endl;
link L;
cout<<"输入结点:"; link *h=L.hhcreat(m);
cout<<"此单链表为:"; L.print(h) ;
cout<<"输入要删除的位置:"; int i; cin>>i;
cout<<"删除此结点!\n"; L.Del(h,i);
cout<<"先链表为:"; L.print(h) ;
cout<<"现链表长度为 "; L.len(h);
}
展开
 我来答
shore11
2007-10-22 · 超过16用户采纳过TA的回答
知道答主
回答量:82
采纳率:0%
帮助的人:56.6万
展开全部
删除结点时,前结点未赋值
还有大哥,你的类的定义是不是忒~~,别忘括号
L.len(h)没有返回值
#include<iostream>
using namespace std;

class link
{
public:
int data; link *next;
};
//---------------------------------------头插法建立带头节点的单链表
link *hhcreat(int n)
{
link *s,*p; p=new link; //开辟空间
p->next=NULL;
for(int i=1;i<=n;i++)
{
s=new link;
cin>>s->data;
s->next=p->next;
p->next=s;
}
return p; //回到头节点p
}
//---------------------------------------单链表的输出
void print(link *head)
{
link *p;
p=head->next;
while(p->next!=NULL) //输出元素,除最后一个
{
cout<<p->data<<"->";
p=p->next;
}
cout<<p->data; //输出最后一个元素
cout<<endl;
}
//-----------------------------------------按位置删除
void Del(link *head,int i)
{
link *p; p=head->next;
link *q;
int j; j=1;
while((p!=NULL)&&(j<i))
{
j++; q=p;
p=p->next;
}
if(p==NULL) cout<<"要删除的结点不存在";
else
{
q->next=p->next;
delete(p);
}
}
//-------------------------------------------链表长度
int len(link *head)
{
link *p;
p=head->next;
int i=1;
while(p->next!=NULL)
{
i++;
p=p->next;
}

return i;
};
};

int main()
{

cout<<"指定链表结点个数:";
int m; cin>>m; cout<<endl;
link L;
cout<<"输入结点:"; link *h=L.hhcreat(m);
cout<<"此单链表为:"; L.print(h) ;
cout<<"输入要删除的位置:"; int i; cin>>i;
cout<<"删除此结点!\n"; L.Del(h,i);
cout<<"先链表为:"; L.print(h) ;
cout<<"现链表长度为 "; L.len(h);
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式