C++ 指向C+中结构的指针+;
我正在努力解决GFG上的问题。 给出了一些代码(无法粘贴到此处,因为此处显示了太多代码) 我需要对C++ 指向C+中结构的指针+;,c++,pointers,struct,C++,Pointers,Struct,我正在努力解决GFG上的问题。 给出了一些代码(无法粘贴到此处,因为此处显示了太多代码) 我需要对populateNext(node*p)进行编码,其中p是树的根节点。 我对函数进行了如下编码,但它不工作,输出为3->-1,而不是3->8->10->12->-1 void populateNext(struct node* p) { static node* x=NULL; if(p==NULL) return; populateNext(p->right);
populateNext(node*p)
进行编码,其中p是树的根节点。
我对函数进行了如下编码,但它不工作,输出为3->-1
,而不是3->8->10->12->-1
void populateNext(struct node* p)
{
static node* x=NULL;
if(p==NULL) return;
populateNext(p->right);
p->next=x;
x=p;\
populateNext(p->left);
}
我认为创建的x
节点从未被修改,因此主函数ptr
中的指针不会向前移动。然后我寻找了更多的解决方案,找到了一个类似的双指针解决方案。我不知道为什么我的那个坏了,但下面的那个坏了
void find(struct node* root,struct node **nextr)
{
if(root)
{
find(root->right,nextr);
root->next = *nextr;
*nextr = root;
find(root->left,nextr);
}
}
void populateNext(struct node* p)
{
struct node* next = NULL;
find(p,&next);
}
我知道指针x存储的是结构变量的地址,每次调用函数时,我都会给指针分配一个新的节点指针,这样它就可以工作了。我尝试将节点x
声明为全局,但仍然是相同的答案3->-1
我试着搜索结构的指针,但到处都只给出了如何做。我想问为什么代码不适用于单指针,为什么它适用于指针到指针,指针到指针的用途是什么,即为什么我们使用is?单指针的局限性是什么?比双指针更好的名称是指针到指针。这意味着,您正在分配4个字节(在32位系统中)来保存某物的地址。它是什么取决于程序员。如果您使用指针指向指针,那么您持有的是另一个地址的地址,它可能持有某物的另一个地址(如此结构)。可以进行任何组合
在第一次尝试中,每个递归调用都有自己的
x
变量-这是错误的。该算法需要公共nextr
变量,该变量只分配一次,并在每个递归级别上使用。这就是你的程序开始工作的原因
第二次尝试在堆栈上分配了
next
地址,初始化为NULL
。此地址被传递给递归的查找函数(&next
),该函数依次知道它是什么,并向它写入(*nextr=root
)。这是在populateNext
中分配的next
变量堆栈上进行的写入,就像在每次查找调用上一样“每个递归调用都有它自己的x变量,这是错误的,因为我使用了xstatic@RitikaGupta右键,选中makingstatic struct node*x=NULL
而不是静态节点*x=NULL代码>仍然相同problem@RitikaGupta我鼓励您使用Debugger,比如gdb
或它的可视化叠加来检查问题所在。特别检查x
变量内容和每个重现级别的地址是否相同。下一件事是遵循x
更改,并将其与第二个解决方案进行比较。我将尝试相同的方法。非常感谢。