我尚不完全了解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,我在做什么错了?
答案 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);
希望对您有用。