我们如何添加备用节点数据?

时间:2014-07-24 04:19:29

标签: c++ c singly-linked-list

我们如何从给定单链表中的交替节点添加数据?

例如,假设我们有6个节点,其后面有整数作为数据:1 2 3 4 5 6。 因此我们应该将所有备用节点添加为1 + 3 + 5 = 9,同样2 + 4 + 6 = 12,因此输出应为13和11。

我的方法很糟糕,因为它崩溃了,现在是:

while(temp->next!=NULL)
{ 
  if(temp->next->next!=NULL)
  {
    sum=temp->data + temp->next->next->data;
  }
  else
  {
    sum=sum+temp->data;
  }
  return sum;
} //similarly i did for adding other alternate node data

请有人建议我做好和最好的方法吗?

2 个答案:

答案 0 :(得分:1)

看来你应该通过准备两者的总变量来交替聚合 以下示例

int ff = 0, sum[2] = {0};

while(temp){
    sum[ff] += temp->data;
    temp = temp->next;
    ff = !ff;//0 -> 1, 1-> 0
}
printf("%d, %d\n", sum[0], sum[1]);
//Using a pointer if there is a need to return a value to the caller as a function
//*out1 = sum[0];*out2 = sum[1];

void sum(node_type *temp, int *out1, int *out2){
    int ff = 1, sum[2] = {0};

    for(;temp; temp = temp->next)
        sum[ff = !ff] += temp->data;

    out1 && (*out1 = sum[0]);//call E.g sum(head, &sum1, &sum2);//sum(head, &sum1, NULL);sum(head, NULL, &sum2);
    out2 && (*out2 = sum[1]);
}

答案 1 :(得分:0)

由于您要返回两个int,请为输出创建struct

struct sum_output
{
    int first;
    int second;
};

使其成为函数的返回类型。

struct sum_output sum(node* list);

通过迭代列表中的节点并返回它来计算first的{​​{1}}和second成员。

struct