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后,在打印链表时会出错? 展开
#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后,在打印链表时会出错? 展开
3个回答
展开全部
系统是不是有问题,刚才发不出去:
#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);
}
展开全部
不是你说的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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p1 = new Node()改为 p1 = new Node后,应该不会出错的。
你之所以出现错误,是因为display中的判断条件又无。
使用p->next!=NULL作为判断条件的话,需要在new Node之后,把node->next赋值为NULL才可以。
你之所以出现错误,是因为display中的判断条件又无。
使用p->next!=NULL作为判断条件的话,需要在new Node之后,把node->next赋值为NULL才可以。
追问
p1 = new Node() 和 p1 = new Node 有什么区别吗?
追答
没区别.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询