Как мы можем добавить данные альтернативного узла?

0

Как мы можем добавлять данные из чередующихся узлов из данного отдельно связанного списка?

Например, допустим, что у нас есть 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

Можете ли вы предложить мне хороший и лучший подход?

  • 0
    @llya спасибо за правки
  • 0
    Почему 1, 3, 4 и 5 для первого и почему 2, 4 и 5 для второго?
Показать ещё 3 комментария
Теги:
singly-linked-list

2 ответа

0
Лучший ответ

Поскольку вы хотите вернуть два int s, создайте struct для вывода:

struct sum_output
{
    int first;
    int second;
};

Сделайте возвращаемый тип функции.

struct sum_output sum(node* list);

Вычислите first и second элементы struct, итерации по узлам списка и верните его.

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;
}
  • 0
    @ R Саху большое спасибо ..
  • 0
    @ user3871332, пожалуйста.
1

Кажется, что вам просто нужно сделать совокупность поочередно, подготовив переменную total для двух.
Следующий пример

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]);
}
  • 0
    Можете ли вы изменить свой ответ некоторым объяснением своего кода?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню