似乎无法确定我在这里错过了什么。我知道如何正确地在链表的开头插入一个新节点:
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();
}
但这只是删除了除第一个节点以外的所有节点。
遍历列表,然后添加新节点。注意,不需要修改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();
}
允许统一处理所有情况(即避免对"列表中的第一个节点"情况进行特殊处理)的常见习惯用法如下
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();
}