-2

这是循环列表节点的结构声明:

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);
...
}

不工作:(

4

1 回答 1

0

您的函数需要实际修改HeadTail(即修改这些指针指向的位置)的能力。因此,您需要通过引用传递它们Node *&

另一方面,x不是您需要传递给函数的变量。(它是Node结构的成员。)

所以你的函数应该这样定义:

void Fill(Node *&Head, Node *&Tail, int &info)
{
   // <function body>
}

您想要传递给函数的任何内容,以便函数对其所做的任何更改都反映在函数之外,您需要通过引用传递(或者做一些更复杂的事情,比如指针,在 和 的情况下Head意味着Tail指向指针)。

于 2013-03-03T14:36:39.020 回答