C++ 链表中节点的功能是什么?
我正在从头创建一个链表。这是代码。首先,我定义了C++ 链表中节点的功能是什么?,c++,linked-list,C++,Linked List,我正在从头创建一个链表。这是代码。首先,我定义了node*root=NULL 这意味着根节点没有元素。但是当我附加第一个元素时,我必须创建root=newnode() 是不是node*root=NULL是否已创建根节点?那么为什么我必须使用root=newnode() 实际上我被node*root=NULL混淆了&根=新节点()&root==NULL'。你能让我明白吗 #include<bits/stdc++.h> using namespace std; struct node {
node*root=NULL代码>
这意味着根节点没有元素。但是当我附加第一个元素时,我必须创建root=newnode()代码>
是不是node*root=NULL代码>是否已创建根节点?那么为什么我必须使用root=newnode()代码>
实际上我被node*root=NULL混淆了代码>&根=新节点()代码>&root==NULL
'。你能让我明白吗
#include<bits/stdc++.h>
using namespace std;
struct node
{
int roll;
node *next;
};
node *root=NULL;
void append(int roll)
{
if( root==NULL)
{
root=new node();
root->roll=roll;
root->next=NULL;
}
else
{
node *current_node=root;
while(current_node->next!=NULL)
{
current_node=current_node->next;
}
node *newnode=NULL;
newnode=new node();
newnode->roll=roll;
newnode->next=NULL;
current_node->next=newnode;
}
}
#包括
使用名称空间std;
结构节点
{
整流罩;
节点*下一步;
};
node*root=NULL;
无效附加(整数滚动)
{
if(root==NULL)
{
根=新节点();
根->滚动=滚动;
root->next=NULL;
}
其他的
{
节点*当前_节点=根;
while(当前节点->下一步!=NULL)
{
当前节点=当前节点->下一步;
}
node*newnode=NULL;
newnode=新节点();
新建节点->滚动=滚动;
newnode->next=NULL;
当前节点->下一步=新节点;
}
}
原因在于其他方面
您正在查找当前列表的结尾,并附加了一个元素。要实现这一点,您可以更改当前最后一个节点的next
指针(它是NULL
,因为它是最后一个)以指向新节点
但是如果列表中根本没有节点,会发生什么呢?没有要修改的next
指针,也不能追加:必须创建第一个节点,而不是任何其他节点的next
。这种情况在else
子句中没有处理,它是root=new节点()这让你很恼火
一句话。通常情况下,一个不会追加,因为您必须扫描整个列表
如果您真的想追加,最好跟踪指向最后一个元素的指针。那么您有两个指针:根指针和最后一个指针。仍然需要根目录才能扫描列表
如果您没有跟踪最后一个指针,最好是始终预先结束(如果您愿意,可以假装列表的最后一个元素是根节点)。这是通常对FIFO堆栈所做的
顺便说一句,在预结束时,您不必处理最初的NULL
根:这个NULL
将成为第一个节点的下一个指针,并且没有其他事情可做。原因在于其他
您正在查找当前列表的结尾,并附加了一个元素。要实现这一点,您可以更改当前最后一个节点的next
指针(它是NULL
,因为它是最后一个)以指向新节点
但是如果列表中根本没有节点,会发生什么呢?没有要修改的next
指针,也不能追加:必须创建第一个节点,而不是任何其他节点的next
。这种情况在else
子句中没有处理,它是root=new节点()这让你很恼火
一句话。通常情况下,一个不会追加,因为您必须扫描整个列表
如果您真的想追加,最好跟踪指向最后一个元素的指针。那么您有两个指针:根指针和最后一个指针。仍然需要根目录才能扫描列表
如果您没有跟踪最后一个指针,最好是始终预先结束(如果您愿意,可以假装列表的最后一个元素是根节点)。这是通常对FIFO堆栈所做的
顺便说一句,当您进行预处理时,您不必处理最初的NULL
根:这个NULL
将成为第一个节点的下一个指针,无需其他操作。您的链接列表将是一个由指针连接的节点的列表
如果分配节点*root=nullptr
,您将无法访问根目录的任何成员。毕竟,root并不指向节点,而是指向nullprt
root=new Node()
使用默认构造函数创建一个新的节点元素。您现在可以访问此元素的成员。这就是为什么root->rool
和root->next
现在可以工作的原因
node*root
:声明root是指向节点的指针
root=NULL
:对我来说似乎过时了,但会指定
root=new node()
:将root分配给使用默认构造函数创建的节点的实例
root==nullprt
:如果root是nullptr,则为True。您的链接列表将是一个由指针连接的节点列表
如果分配节点*root=nullptr
,您将无法访问根目录的任何成员。毕竟,root并不指向节点,而是指向nullprt
root=new Node()
使用默认构造函数创建一个新的节点元素。您现在可以访问此元素的成员。这就是为什么root->rool
和root->next
现在可以工作的原因
node*root
:声明root是指向节点的指针
root=NULL
:对我来说似乎过时了,但会指定
root=new node()
:将root分配给使用默认构造函数创建的节点的实例
root==nullprt
:如果root是nullptr,则为True。首先,您必须了解指针是什么。他们有记忆地址
不是节点*root=NULL代码>是否已创建根节点
否。根
不是节点
,而是指向节点
的指针。它是用<代码> null <代码>初始化的(在C++ <代码> NulLPTR < /代码>中应该是首选的),所以我