【问题标题】:How can we add alternate node data?我们如何添加备用节点数据?
【发布时间】:2014-07-24 04:19:28
【问题描述】:

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

例如,假设我们有 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

请任何人都可以建议我最好的方法吗?

【问题讨论】:

  • @llya 感谢您的编辑
  • 为什么第一个是 1、3、4 和 5,为什么第二个是 2、4 和 5?
  • @immibis 对不起,我现在编辑节点,数据为 1 2 3 4 5 6 我应该添加相邻数据,即 1+3(skip 2)+5(skip 4)=9 类似 2 +4+6=12
  • 您的意思是“替代”,而不是“相邻”。如果您的讲师说“相邻”,那么您可能误解了这个问题。
  • @JimBalter 是的,谢谢我已经编辑

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


【解决方案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]);
}

【讨论】:

  • 你能用你的代码解释修改你的答案吗?
【解决方案2】:

由于要返回两个ints,因此为输出创建一个struct

struct sum_output
{
    int first;
    int second;
};

将其设为函数的返回类型。

struct sum_output sum(node* list);

通过迭代列表的节点并返回它来计算structfirstsecond 成员。

struct sum_output sum(node* list)
{
    struct sum_output ret = {0, 0};
    for ( ; list != NULL; list = list->next )
    {
       ret.first += list->data;
       if ( list->next != NULL )
       {
          ret.second += list->next->data;
          list = list->next;
       }
    }
    return ret;
}

【讨论】:

    猜你喜欢
    • 2015-08-11
    • 1970-01-01
    • 2021-07-19
    • 2022-01-26
    • 2018-06-30
    • 2012-11-18
    • 2019-05-24
    • 2016-09-01
    • 1970-01-01
    相关资源
    最近更新 更多