我正在编写一个简单的函数来插入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);
}
答案 0 :(得分:2)
您可以通过以下方式简化逻辑:
void Insert(node **pnode, int data)
{
while (*pnode) {
pnode = &(*pnode)->link;
}
*pnode = new node(data, NULL);
}
假设您有一个node
构造函数,可以从参数初始化data
和link
。
而不是将其称为
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)