单链表代码c++中的逻辑错误



对于以下代码,我的目标结果是4->5->,然而输出的结果仅为4->

对于上下文,我尝试仅在c++中使用结构和函数来实现单链表。

代码:

#include <iostream>
using namespace std;
struct node
{
int data;
node* next;
};
node* head = NULL;
void insert(int val)
{
node* n = new node();
n->data = val;

if(head == NULL)
{
head = n;
}
else
{
node* temp = head;
while(temp!=NULL)
{
temp = temp->next;
}
temp = n;
}
}
void display()
{
if(head == NULL)
{
cout<<"UNDERFLOW ! LINKED LIST IS EMPTY !"<<endl;
}
else
{
cout<<"LINKED LIST!"<<endl;
node* temp = head;
while(temp!=NULL)
{
cout<<temp->data<<"-->";
temp = temp->next;
}
cout<<endl;
}
}
int main()
{
insert(4);
insert(5);
display();
return 0;
}

正如@StephenNewell正确指出的,insert函数中有一个错误。

同样在C++中,使用nullptr而不是NULL

更改insert():中的以下代码

node* temp = head;
while(temp!=NULL)
{
temp = temp->next;
}
temp = n;

至:

node* temp = head;
while (temp->next != nullptr)
{
temp = temp->next;
}
temp->next = n;

您的问题是temp是一个临时变量,您每次只更改临时变量的值,而不是更改链表的最后一个节点。

如果要更改指针的值,则需要或你应该换成

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

相关内容

  • 没有找到相关文章

最新更新