C++ 关于用new创建链表的问题

目前我只知道new相当于malloc,创建链表的代码如下:#include<iostream>usingnamespacestd;structNode{intnum;No... 目前我只知道new相当于malloc,创建链表的代码如下:
#include<iostream>
using namespace std;

struct Node{
int num;
Node *next;
};

Node *create(){
Node *head,*p1,*p2;
p1 = new Node;

cout<<"输入数字: ";
cin>>p1->num;
p2=head=p1;

while(p1->num!=0){
p1 = new Node();
cout<<"输入数字: ";
cin>>p1->num;
p2->next = p1;
p2=p1;
}
return head;
}

void display(Node *head){
Node *p;
p = head;

int i=1;
while(p->next!=NULL){
cout<<"第"<<i<<"个元素是: "<<p->num<<endl;
p=p->next;
i++;
}
}
void main(){
Node *a =create();
display(a);
}
---------------------------------------------------------------------------------------------------------------
想问下为什么把creat()中的 p1 = new Node()改为 p1 = new Node后,在打印链表时会出错?
展开
 我来答
jhanker
2015-09-27 · TA获得超过1479个赞
知道小有建树答主
回答量:675
采纳率:73%
帮助的人:498万
展开全部

系统是不是有问题,刚才发不出去:

#include<iostream>
using namespace std;
struct Node{
     int num;
     Node *next;
};
Node *create(){
     Node *head,*p1,*p2;
     p1 = new Node;
     cout<<"输入数字: ";
     cin>>p1->num;
     p2=head=p1;
     while(p1->num!=0){
          p1 = new Node;//不是这里的问题
          cout<<"输入数字: ";
          cin>>p1->num;
          p2->next = p1;
          p2=p1;
  }
  p2->next=NULL;//加上这一句,让尾记录的next指向空
  return head;
}
void display(Node *head){
 Node *p;
 p = head;
 
 int i=1;
 while(p){//改成这样就可以了,因为当p是尾记录时还不是空,接着就是空指针,就跳出循环了
  cout<<"第"<<i<<"个元素是: "<<p->num<<endl;
  p=p->next;
  i++;
 }
}
void main(){
 Node *a =create();
 display(a);
}
jhanker
2015-09-27 · TA获得超过1479个赞
知道小有建树答主
回答量:675
采纳率:73%
帮助的人:498万
展开全部

不是你说的new的问题,问题出在其他地方,看下面的代码和解释:

#include<iostream>
using namespace std;
struct Node{
     int num;
     Node *next;
};
Node *create(){
     Node *head,*p1,*p2;
     p1 = new Node;
     cout<<"输入数字: ";
     cin>>p1->num;
     p2=head=p1;
     while(p1->num!=0){
          p1 = new Node;//不是这里的问题
          cout<<"输入数字: ";
          cin>>p1->num;
          p2->next = p1;
          p2=p1;
  }
  p2->next=NULL;//加上这一句,让尾记录的next指向空
  return head;
}
void display(Node *head){
 Node *p;
 p = head;
 
 int i=1;
 while(p){//改成这样就可以了,因为当p是尾记录时还不是空,接着就是空指针,就跳出循环了
  cout<<"第"<<i<<"个元素是: "<<p->num<<endl;
  p=p->next;
  i++;
 }
}
void main(){
 Node *a =create();
 display(a);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cooke1234
2015-09-27 · TA获得超过6861个赞
知道大有可为答主
回答量:4617
采纳率:72%
帮助的人:3602万
展开全部
p1 = new Node()改为 p1 = new Node后,应该不会出错的。
你之所以出现错误,是因为display中的判断条件又无。
使用p->next!=NULL作为判断条件的话,需要在new Node之后,把node->next赋值为NULL才可以。
追问
p1 = new Node() 和 p1 = new Node 有什么区别吗?
追答
没区别.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式