C++ 列表函数不起作用
C++ list functions not worling
我正在尝试创建一个程序,让我在列表的尾部添加元素,然后打印它们。它没有给我一个错误,但他什么也没做。我做错了什么?
#include<iostream>
using namespace std;
struct lista{
int val;
lista *next;
};
typedef lista* ptr_lista;
void tail_add(ptr_lista head, int valore){
if(head=NULL){
head=new lista;
head->val=valore;
head->next=NULL;
} else {
ptr_lista p=head;
while(p->next!=NULL){
p=p->next;
}
p->next=new lista;
p->next->val=valore;
p->next->next=NULL;
}
}
void print(ptr_lista p){
while(p!=NULL){
cout<<p->val<< " ";
p=p->next;
}
}
int main(){
ptr_lista m;
tail_add(m,5);
tail_add(m,6);
print(m);
}
对于初学者来说,指针 m
未初始化并且具有不确定的值
ptr_lista m;
您需要对其进行初始化
ptr_lista m = nullptr;
函数按值接受指针
void tail_add(ptr_lista head, int valore){
所以在
函数中改变参数head
head=new lista;
对main中声明的原始指针m
没有影响。
您需要将参数声明为对指针的引用
void tail_add(ptr_lista &head, int valore){
函数可以这样定义
void tail_add( ptr_lista &head, int valore )
{
ptr_lista new_lista_ptr = new lista { valore, nullptr };
if ( head == nullptr )
{
head = new_lista_ptr;
}
else
{
ptr_lista p = head;
while ( p->next ) p = p->next;
p->next = new_lista_ptr;
}
}
注意像
这样的指针引入别名不是个好主意
typedef lista* ptr_lista;
例如,如果您将写
const ptr_lista
那么就是
lista * const
没有
const lista *
声明函数参数所必需的 print
因为它不会更改列表的节点。
我正在尝试创建一个程序,让我在列表的尾部添加元素,然后打印它们。它没有给我一个错误,但他什么也没做。我做错了什么?
#include<iostream>
using namespace std;
struct lista{
int val;
lista *next;
};
typedef lista* ptr_lista;
void tail_add(ptr_lista head, int valore){
if(head=NULL){
head=new lista;
head->val=valore;
head->next=NULL;
} else {
ptr_lista p=head;
while(p->next!=NULL){
p=p->next;
}
p->next=new lista;
p->next->val=valore;
p->next->next=NULL;
}
}
void print(ptr_lista p){
while(p!=NULL){
cout<<p->val<< " ";
p=p->next;
}
}
int main(){
ptr_lista m;
tail_add(m,5);
tail_add(m,6);
print(m);
}
对于初学者来说,指针 m
未初始化并且具有不确定的值
ptr_lista m;
您需要对其进行初始化
ptr_lista m = nullptr;
函数按值接受指针
void tail_add(ptr_lista head, int valore){
所以在
函数中改变参数head
head=new lista;
对main中声明的原始指针m
没有影响。
您需要将参数声明为对指针的引用
void tail_add(ptr_lista &head, int valore){
函数可以这样定义
void tail_add( ptr_lista &head, int valore )
{
ptr_lista new_lista_ptr = new lista { valore, nullptr };
if ( head == nullptr )
{
head = new_lista_ptr;
}
else
{
ptr_lista p = head;
while ( p->next ) p = p->next;
p->next = new_lista_ptr;
}
}
注意像
这样的指针引入别名不是个好主意typedef lista* ptr_lista;
例如,如果您将写
const ptr_lista
那么就是
lista * const
没有
const lista *
声明函数参数所必需的 print
因为它不会更改列表的节点。