c++链表的 尾插法怎么创建新链表?

这是我的程序:#include<iostream>usingnamespacestd;structNode{intdata;Node*next;};/*voidCreat... 这是我的程序:
#include<iostream>
using namespace std;
struct Node
{
int data;
Node *next;
};
/*void Create(Node *&first) // 头插法 输入数据,引用全局变量
{
Node *p;
int x;
first=NULL;
cout<<"输入数据,以输入-1结束输入:";
cin>>x;
while(x!=-1) //头插法输入数据,前面输入的数据向后退一
{
p=new Node;
p->data=x;
p->next=first;
first=p;
cout<<"输入数据,以输入-1结束输入:";
cin>>x;
}
}*/

void Create(Node *&tail)//尾插法
{
Node *p;
int x;
tail =NULL;
cout<<"输入数据,以输入-1结束输入:";
cin>>x;
while(x!=-1)
{
p=new Node;
p->data=x;
p->next=NULL;tail=p;
tail->next =p;
cout<<"输入数据,以输入-1结束输入:";
cin>>x;
}
}

void print(Node *p) // 打印数据 ,是头插法则从后面输入的向前打印,尾插法则相反
{
cout<<"这个链表是:";
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
void check_point (Node *p) //查结点序号
{
cout<<"输入你要找的结点序号";
int i=1,n; //从0查起,去掉最后一个-1
cin>>n;
while(p!=NULL && i != n)
{
p = p->next;
i++;
}
cout<<"序号为"<<i<<"的结点数据是:"<<p->data<<endl;
}
void check_data(Node *k) //输入数据查结点
{
int n,i=1;
cout<<"输入你要查找的数据:";
cin>>n;
while(k->data!=n)
{
k=k->next;
i++;
}
cout<<"序号是:"<<i<<endl;
}
void delete_data(Node *dat)//删除结点
{

Node *p;
int j,n;
cout<<"请输入你要删除的结点";
cin>>n;
j=1;
if(n==1)//删除表头
{
p =dat->next;
delete dat;
dat = p;
}
else
{
while(j<n )
{
dat = dat->next;
j++;
}
p= dat->next;
dat->next=p->next;
delete dat;
dat = p; //为什么 删除了n个????
}
print(dat);
}
int main() //主函数
{
Node *dat; //定义结构体变量
Create(dat);
print(dat);
check_point(dat);
check_data(dat);
delete_data(dat);

return 0;
}

问题1:程序的尾插法不能创建,怎么解决?
问题2:删除结点那里,为什么直接删除了n个?怎么才能让它只删除你所输入的那个位置的结点?

程序是可以运行的,复制运行下,改好了给高分,还有,要详细说明下,谢了~!
展开
 我来答
被世界LJ
2013-05-14 · TA获得超过438个赞
知道答主
回答量:96
采纳率:0%
帮助的人:76.2万
展开全部

void Create(Node *&tail)//尾插法
{
Node *p;
int x;
tail =NULL;
cout<<"输入数据,以输入-1结束输入:";
cin>>x;
while(x!=-1)
{
p=new Node;
p->data=x;
tail=p->next; //p->next指向tail ,则tail插入到链表里
p=p->next  //将p移动到新节点的位置

p->next=NULL;//然后将让节点的下一个位置为空结点
cout<<"输入数据,以输入-1结束输入:";
cin>>x;
}

你的语句是

{p->next=NULL;

tail=p;
tail->next =p;}
p是指向当前结点的,tail是新的结点,按照你的意思是,p->next=NULL,P的下一个结点为空,p到tail的位置,这儿你就出错了,p这个指针到了tail的位置,可是tail和前一个指针有什么关系呢,这个链表就断了,没有连接上,然后你还让p指向新节点的next干什么,

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式