这是循环列表节点的结构声明:
struct Node
{
int x; // info field
struct Node *Next;
};
在int main()
我有一个循环用1到10的数字填充列表:
int main()
{
Node *Head=NULL, *Tail=NULL;
int size = 0;
int info = 0;
for (int j = 0; j < 10; j++)
{ // for
info++;
size++;
Node *temp=new Node;
temp->Next=Head;
temp->x=info;
if (Head!=NULL)
{
Tail->Next = temp;
Tail=temp;
}
else Head=Tail=temp;
} // endfor
}
如何制作包含此循环的函数并从main()
调用?
像这样:
void Fill(struct Node *Head, struct Node *Tail, int &x, int &info)
{
// <function body>
}
int main()
{
...
Fill(Head, Tail, x, info);
...
}
不起作用:(
答案 0 :(得分:0)
您的功能需要实际修改Head
和Tail
的功能(即修改这些指针指向的位置)。因此,您需要通过引用Node *&
传递它们。
另一方面,x
不是您需要传递给函数的变量。 (它是Node
结构的成员。)
所以你的函数应该像这样定义:
void Fill(Node *&Head, Node *&Tail, int &info)
{
// <function body>
}
你想要传递给函数的任何东西,使得函数对它做出的任何改变都反映在函数外部,你需要通过引用传递(或做一些更复杂的事情,比如指针,在{{ 1}}和Head
表示指针指针。