基于节点输出功能

时间:2016-01-09 20:56:02

标签: c++ output nodes

我是编码cpp的新手,我不明白我们如何获得有关节点主题的以下输出?有人可以帮忙吗?

提前致谢:)

以下程序的输出是

10 3 22 33

5 7 6

3 22 33

2 4 6

以下是代码:

void display(Node *head){

  if(head == NULL)
     cout<<"head is NULL"<<endl;

  for(Node *tmp=head; tmp!=NULL; tmp = tmp->next )
     cout<<" "<<tmp->data;
     cout<<endl;
}

Node *func1(int value1, int value2, int value3){
  Node *head = new Node;
  head->next = new Node;
  head->next->next = new Node;
  head->next->next->next = NULL;
  head->data = value1;
  head->next->data = value2;
  head->next->next->data = value3;
  return head;  
}

void func2(Node *head1, Node *head2, Node *head3){
  head1->next = head3;
  head1->next->data =3;
  head1= head2;
  head1->data = 5;
  head1->next->data = 7;
  head2 = head3;
  head3 = head1;
}

 void func3(Node *head){
    for(; head!= NULL; head = head->next)
        head->data *=2;
}

 int main(){

 Node *head1 = func1(10,20,30);
 Node *head2 = func1(2,4,6);
 Node *head3 = func1(11,22,33);

 func2(head1, head2, head3);
 display(head1);
 display(head2);
 display(head3);

 head1 = func1(1,2,3);
 func3(head1);
 display(head1);
 return 0;
 }

修改

任何人都可以解释我们如何才能看到数据项的变化,尽管我们无法看到本地指针的变化?我认为我们不应该看到任何数据变化,因为头指针是真实副本的副本?

例如,我们可以看到head1-&gt; data = 5但是head2 = head1部分没有效果。为什么呢?

我对这个话题非常困惑,请帮忙:(

1 个答案:

答案 0 :(得分:0)

func2没有按你的想法行事:

void func2(Node *head1, Node *head2, Node *head3){
  head1->next = head3;
  head1->next->data =3;
  head1= head2;
  head1->data = 5;
  head1->next->data = 7;
  head2 = head3;  // this has no effect
  head3 = head1;  // this has no effect
}

当你说head2 = head3时,你只是改变了本地的head2指针,你没有改变调用者的相应指针。对于head3 = head也是如此。

您可能打算做的是通过引用传递指针:

void func2(Node *&head1, Node *&head2, Node *&head3){...

现在调用者中的相应指针将受到分配的影响。如果参数不是引用,那么它们只是最初传递的参数的副本。