Sum of the alternate nodes of linked list in C++


In this problem, we are given a linked list. Our task is to print the sum of alternate nodes of the linked list.

Linked list is a sequence of data structure which are connected together via links.

Now, let’s get back to the problem. Here, we will add alternate nodes of the linked list. This means we will add nodes are positions 0, 2, 4, 6, …

Let’s take an example to understand the problem, 

Input 

4 → 12 → 10 → 76 → 9 → 26 → 1

Output 

24

Explanation 

considering alternate strings −
4 + 10 + 9 + 1 = 24

To solve this problem, we will visit each node one by one and for every nest node. We will add value to the sum. To keep a check on nodes, we will use a flag.

This can be done using iteration or recursion. We will discuss both here,

Example

Iterative approach 

 Live Demo

#include <iostream>
using namespace std;
struct Node {
   int data;
   struct Node* next;
};
void pushNode(struct Node** head_ref, int newData) {
   struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
   newNode->data = newData;
   newNode->next = (*head_ref);
   (*head_ref) = newNode;
}
int sumAlternateNodeIt(struct Node* head) {
   bool flag = true;
   int sum = 0;
   while (head != NULL){
      if (flag)
         sum += head->data;
      flag = !flag;
      head = head->next;
   }
   return sum;
}
int main(){
   struct Node* head = NULL;
   pushNode(&head, 54);
   pushNode(&head, 12);
   pushNode(&head, 87);
   pushNode(&head, 1);
   pushNode(&head, 99);
   pushNode(&head, 11);
   cout<<"The sum of alternate nodes is "<<sumAlternateNodeIt(head);
   return 0;
}

Output

The sum of alternate nodes is 24

Example

Recursive Approach 

 Live Demo

#include <iostream>
using namespace std;
struct Node {
   int data;
   struct Node* next;
};
void pushNode(struct Node** head_ref, int new_data){
   struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));
   new_node->data = new_data;
   new_node->next = (*head_ref);
   (*head_ref) = new_node;
}
void sumAlternateNodeRec(struct Node* node, int& sum, bool flag = true){
   if (node == NULL)
      return;
   if (flag == true)
   sum += (node->data);
   sumAlternateNodeRec(node->next, sum, !flag);
}
int main(){
   struct Node* head = NULL;
   pushNode(&head, 54);
   pushNode(&head, 12);
   pushNode(&head, 87);
   pushNode(&head, 1);
   pushNode(&head, 99);
   pushNode(&head, 11);
   int sum = 0;
   sumAlternateNodeRec(head, sum, true);
   cout<<"The sum of alternate nodes is "<<sum;
   return 0;
}

Output

The sum of alternate nodes is 24

Updated on: 06-Aug-2020

415 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements