似乎无法确定我在这里缺少的东西。我知道如何在链表的开头正确插入一个新节点:
void InsertBeginning(int val) {
Node *n = new Node();
n->data = val;
n->next = A;
A = n;
DisplayList(); //prints list
}
现在我希望做同样的事情,但在我的清单末尾,所以我做了这个:
void AddNode(int val) {
Node *n = new Node();
n->data = val;
n->next = A;
//finds last empty node
while (n->next != NULL) {
n = n->next;
}
A = n;
DisplayList();
}
但这一切都是删除除我的第一个节点之外的所有内容。
答案 0 :(得分:4)
沿着列表向下走,然后添加新节点。请注意,无需修改A
,这可能指向列表的头部,因为它不会更改。
void AddNode(int val) {
Node *n = new Node();
n->data = val;
n->next = NULL;
Node *pnt = A;
// If list is empty, new node becomes first node
if (!pnt) {
A = n;
return;
}
//finds last empty node
while (pnt->next != NULL) {
pnt = pnt->next;
}
pnt->next = n;
DisplayList();
}
答案 1 :(得分:0)
允许人们统一处理所有情况的常用习惯用法(即避免对“列表中的第一个节点”情况进行特殊处理)如下工作
void AddNode(int val)
{
Node *n = new Node();
n->data = val;
// Assuming that `n->next` is already null
Node **pnext = &A;
for (; *pnext != NULL; pnext = &(*pnext)->next);
*pnext = n;
DisplayList();
}