创建的列表中的第一个元素始终为0

时间:2019-02-18 03:37:48

标签: c++

我尚不完全了解C / C ++中的链接列表和节点如何工作,但这是我用来将节点添加到列表中的功能。

void AddNode(Node* head, int new_data) 
{ 
    Node* new_node = new Node(); 

    Node *last = head;

    new_node->data  = new_data; 

    new_node->next = NULL; 

    if (head == NULL) 
    { 
       head = new_node; 
       return; 
    }   

    while (last->next != NULL)
    {
        last = last->next;
    }
        last->next = new_node; 


}

列表中的第一个元素始终为0,我在做什么错了?

2 个答案:

答案 0 :(得分:1)

在c ++中,您必须更新 节点* last = head; 至 节点*&last = head;

在C中,您必须更新 节点* last = head; 至 节点** last = head;

答案 1 :(得分:0)

我在下面使用了功能AddNode:

Node* head = new Node();
AddNode(head, 1);

我遇到了和你一样的问题,因为第一个元素永远不会改变。有两个修改 (1)返回头部

Node* AddNode(int new_data) 
{ 
    Node* head = NULL;
    Node* new_node = new Node(); 

    Node *last = head;

    new_node->data  = new_data; 
    cout << "-->" << new_node->data << endl;

    new_node->next = NULL; 

    if (head == NULL) 
    { 
       head = new_node; 
       return head; 
    }   

    while (last->next != NULL)
    {
        last = last->next;
    }
        last->next = new_node; 

    return head;
}

使用如下:

Node* head = AddNode(1);

(2)通过头地址,因为您要更改

void AddNode(Node** head, int new_data) 
{ 
    Node* new_node = new Node(); 

    Node *last = *head;

    new_node->data  = new_data; 
    cout << "-->" << new_node->data << endl;

    new_node->next = NULL; 

    if (*head == NULL) 
    { 
       *head = new_node; 
       return; 
    }   

    while (last->next != NULL)
    {
        last = last->next;
    }
        last->next = new_node; 
}

使用这个谎言:

Node* head = NULL;
AddNode(&head, 1);

希望对您有用。