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);
} 展开
实在不懂~~
求各位大侠帮忙……
#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);
} 展开
1个回答
展开全部
删除结点时,前结点未赋值
还有大哥,你的类的定义是不是忒~~,别忘括号
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;
}
还有大哥,你的类的定义是不是忒~~,别忘括号
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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询