我正在尝试学习c ++中的链表,我遇到了一个问题,因为链表只添加了2个元素。
代码:
struct Node {
int data1;
Node* next;
};
void firstElement(Node *&head, int d)
{
Node* temp = new Node;
temp->data1 = d;
temp->next = NULL;
head = temp;
}
void insert(Node *&node, int data)
{
Node* temp = new Node;
temp->data1 = data;
temp->next = NULL;
while(node)
{
if(node->next == NULL)
{
node->next = temp;
return;
}
node = node->next;
}
}
void display(Node *&node)
{
while(node != NULL)
{
cout << node->data1 << endl;
node = node->next;
}
}
int main()
{
Node* head;
firstElement(head, 1);
insert(head, 2);
insert(head, 3);
insert(head, 4);
insert(head, 5);
insert(head, 6);
insert(head, 7);
insert(head, 8);
insert(head, 9);
insert(head, 10);
display(head);
}
在输出中,它只给出值9 and 10
,即只给出最后2个元素。看起来它只是取代了价值观。但是,我没有得到它。对于我的temp
节点,我已将其初始化为下一个节点temp->next = NULL
。
在insert()
函数中,我使用if condition
仅添加下一个节点(如果为NULL)。
有什么建议吗?
答案 0 :(得分:3)
问题来自insert
功能。只要你这样做就需要Node* &
node = node->next;
在循环中,它会将调用者使用的变量修改为节点参数列表。
删除&
,您的问题就解决了:
void insert(Node* node, int data)