将结束节点添加到链接列表

时间:2016-10-25 00:12:58

标签: c++ linked-list

似乎无法确定我在这里缺少的东西。我知道如何在链表的开头正确插入一个新节点:

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

但这一切都是删除除我的第一个节点之外的所有内容。

2 个答案:

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