在链表末尾插入 我写了一个简单的函数,插入到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; } }

在链表末尾插入 我写了一个简单的函数,插入到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; } },c++,linked-list,C++,Linked List,更改中的条件,同时从以下位置构造: while (temp!=NULL) { temp=temp->link; } 到 在语句中,temp->link=temp2,temp是一个空指针。您正在取消对NULL指针的引用 要在后面附加节点,temp指针应指向链接列表的最后一个节点。因此,在while循环中,当到达最后一个节点时,即link成员未指向任何内容的节点(为NULL)时,只需停止链表遍历while(temp->link!=NULL)将在最后一个节点停止,因为最后一个节点将有l

更改
中的条件,同时
从以下位置构造:

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

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


要在后面附加节点,
temp
指针应指向链接列表的最后一个节点。因此,在
while
循环中,当到达最后一个节点时,即
link
成员未指向任何内容的节点(
为NULL
)时,只需停止链表遍历
while(temp->link!=NULL)
将在最后一个节点停止,因为最后一个节点将有
link
成员指向
NULL
您可以通过执行以下操作简化逻辑:

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;
}
void Insert(node **pnode, int data)
{
    while (*pnode) {
        pnode = &(*pnode)->link;
    }
    *pnode = new node(data, NULL);
}
假设您有一个
节点
构造函数,它通过参数初始化
数据
链接

而不是称之为

head = Insert(head, 42);
你现在该做了

Insert(&head, 42);

将while(temp!=NULL)更改为while(temp->link!=NULL)

At
(temp->link)=temp2
temp
是一个空指针(如果不是,那么当(temp!=null)循环时,您仍然会在
中旋转)。所以您正在解引用一个空指针,它是UB@EmilyL。在发表评论之前,您没有阅读编辑。抱歉,我试图对代码进行分解,这就是为什么在我修复代码之前,您在代码中看到了内核转储。
Insert(&head, 42);