通过引用传递时启动指针不更新

时间:2017-02-06 13:48:51

标签: c++ pointers linked-list stack

这是推送功能。

void push(struct node **head)
{
    struct node *temp;
    temp = new node;
    cout<<"enter the value";
    cin>>temp->data;
    temp->link=NULL;
    if(*head==NULL)
    {   
        *head=new node;
        *head=temp;
    }
    else{
        temp->link=*head;
        *head=temp;
}
}    

这就是我打电话的方式。

struct node *start=NULL;
push(&start);

这是节点

struct node{
    int data;
    struct node *link;
};

现在问题是:我认为列表没有更新。开始始终为空。不知道为什么。

编辑:

void display(struct node **head)
{
    struct node *temp;
    temp=*head;
    if(*head==NULL){
        cout<<"\nthe head is NULL\n";
    }
    while(temp!=NULL)
    {
        cout<<temp->data;
        temp=temp->link;
    }

}

int main() {
    struct node *start=NULL;
    push(&start);
    push(&start);
    push(&start);
    push(&start);
    push(&start);
    display(&start);
    return 0; 
}

输入:

1

2

3

4

5

现在显示出来应该是5 4 3 2 1但是有一些错误。

2 个答案:

答案 0 :(得分:3)

paxdiablo在评论中提到了答案:C ++已通过引用传递。例如:

#include <iostream>

struct node
{
    int data;
    struct node *link;
};

void push(node*& head)
{
    struct node *temp = new node;
    std::cout << "enter the value";
    std::cin >> temp->data;
    temp->link = head;
    head = temp;
}

int main()
{
    node *start = NULL;
    push(start);
    return 0;
}

答案 1 :(得分:0)

替代实施:

void push(struct node** head_reference, int new_data)
{
    struct node* a_node = new node;
    a_node->data  = new_data;
    a_node->link = (*head_reference);    
    (*head_reference)    = a_node;
}

int main() {
    struct node* head = NULL;
    push(&head, 10);
    // rest of your code here
    return 0;
}