向链表中添加结束节点

Add end node to linked list

本文关键字:结束 节点 添加 链表      更新时间:2023-10-16

似乎无法确定我在这里错过了什么。我知道如何正确地在链表的开头插入一个新节点:

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();
}