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 因为它不会更改列表的节点。