在链表的末尾插入

时间:2016-10-29 14:36:36

标签: c++ linked-list

我正在编写一个简单的函数来插入C ++上链表的末尾,但最后它只显示了第一个数据。我无法弄清楚什么是错的。这是功能:

for(var i = 0; i < res.length; i++) {
    console.log('name: ', res[i].name);
    console.log('team: ', res[i].team);
    console.log('position: ', res[i].position);
    console.log('points: ', res[i].points);
}

4 个答案:

答案 0 :(得分:2)

您可以通过以下方式简化逻辑:

void Insert(node **pnode, int data)
{
    while (*pnode) {
        pnode = &(*pnode)->link;
    }
    *pnode = new node(data, NULL);
}

假设您有一个node构造函数,可以从参数初始化datalink

而不是将其称为

head = Insert(head, 42);

你现在正在做

Insert(&head, 42);

答案 1 :(得分:1)

更改while构造中的条件:

while (temp!=NULL) {
    temp=temp->link;
}

while (temp->link!=NULL) {
    temp=temp->link;
}

在语句temp->link = temp2中,temp是一个空指针。您正在取消引用NULL指针。

要在后面追加节点,temp指针应指向链表的最后一个节点。因此,在while循环中,您需要在到达最后一个节点时停止链接列表遍历,即link成员指向任何位置的节点(has NULL)。 while (temp->link!=NULL)将停在最后一个节点,因为最后一个节点会有link成员指向NULL

答案 2 :(得分:0)

node* Insert(node* head, int data)
{
    if (head == NULL) {
        head = new node();
    }
    else {
        while (head->link != NULL) {
            head = head->link;
        }
        head = head->link = new node();
    }
    head->data = data;
    head->link = NULL;
    return head;
}

答案 3 :(得分:0)

将while(temp!= NULL)更改为while(temp-&gt; link!= NULL)

相关问题