我正在编写一个简单的函数,将其插入C++链表的末尾,但最终它仅显示第一个数据。我不知道怎么了。这是功能:

node* Insert(node* head, int data)
{
    if (head == NULL) {
        head = new node();

        head->data = data;
        head->link = NULL;

        return head;
    }
    else {
        node* temp = head;
        while (temp != NULL) {
            temp = temp->link;
        }

        node* temp2 = new node();

        temp2->data = data;
        temp2->link = NULL;
        (temp->link) = temp2;

        return head;
    }
}

最佳答案

从以下位置更改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

关于c++ - 插入链表的末尾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40320166/

10-14 12:40