Tuesday, November 19, 2024
Google search engine
HomeData Modelling & AISum of the alternate nodes of linked list

Sum of the alternate nodes of linked list

Given a linked list, the task is to print the sum of the alternate nodes of the linked list.

Examples

Input : 1 -> 8 -> 3 -> 10 -> 17 -> 22 -> 29 -> 42
Output : 50
Alternate nodes : 1 -> 3 -> 17 -> 29

Input : 10 -> 17 -> 33 -> 38 -> 73
Output : 116
Alternate nodes : 10 -> 33 -> 73

Iterative Approach:  

  1. Traverse the whole linked list.
  2. Set sum = 0 and count=0.
  3. Add the data of the node to sum when the count is even.
  4. Visit the next node.

Below is the implementation of this approach: 

C++




// C++ code to print the sum of Alternate Nodes
#include <iostream>
using namespace std;
 
/* Link list node */
struct Node
{
    int data;
    struct Node* next;
};
 
/* Function to get the alternate
nodes of the linked list */
int sumAlternateNode(struct Node* head)
{
    int count = 0;
    int sum = 0;
 
    while (head != NULL)
    {
 
        // when count is even sum the nodes
        if (count % 2 == 0)
            sum += head->data;
 
        // count the nodes
        count++;
 
        // move on the next node.
        head = head->next;
    }
    return sum;
}
 
// Function to push node at head
void push(struct Node** head_ref, int new_data)
{
    struct Node* new_node = new Node();
    new_node->data = new_data;
    new_node->next = (*head_ref);
    (*head_ref) = new_node;
}
 
// Driver code
int main()
{
    /* Start with the empty list */
    struct Node* head = NULL;
 
    /* Use push() function to construct
    the below list 8 -> 23 -> 11 -> 29 -> 12 */
    push(&head, 12);
    push(&head, 29);
    push(&head, 11);
    push(&head, 23);
    push(&head, 8);
 
    cout << sumAlternateNode(head);
    return 0;
}
 
// This code is contributed by SHUBHAMSINGH10


C




// C code to print the sum of Alternate Nodes
#include <stdio.h>
#include <stdlib.h>
 
/* Link list node */
struct Node {
    int data;
    struct Node* next;
};
 
/* Function to get the alternate
   nodes of the linked list */
int sumAlternateNode(struct Node* head)
{
    int count = 0;
    int sum = 0;
 
    while (head != NULL) {
 
        // when count is even sum the nodes
        if (count % 2 == 0)
            sum += head->data;
 
        // count the nodes
        count++;
 
        // move on the next node.
        head = head->next;
    }
    return sum;
}
 
// Function to push node at head
void push(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;
}
 
// Driver code
int main()
{
    /* Start with the empty list */
    struct Node* head = NULL;
 
    /* Use push() function to construct
       the below list 8 -> 23 -> 11 -> 29 -> 12 */
    push(&head, 12);
    push(&head, 29);
    push(&head, 11);
    push(&head, 23);
    push(&head, 8);
 
    printf(" %d ", sumAlternateNode(head));
    return 0;
}


Java




// Java code to print the sum of Alternate Nodes
class GFG
{
     
/* Link list node */
static class Node
{
    int data;
    Node next;
};
 
/* Function to get the alternate
nodes of the linked list */
static int sumAlternateNode( Node head)
{
    int count = 0;
    int sum = 0;
 
    while (head != null)
    {
 
        // when count is even sum the nodes
        if (count % 2 == 0)
            sum += head.data;
 
        // count the nodes
        count++;
 
        // move on the next node.
        head = head.next;
    }
    return sum;
}
 
// Function to push node at head
static Node push( Node head_ref, int new_data)
{
    Node new_node =new Node();
    new_node.data = new_data;
    new_node.next = (head_ref);
    (head_ref) = new_node;
    return head_ref;
}
 
// Driver code
public static void main(String args[])
{
    /* Start with the empty list */
    Node head = null;
 
    /* Use push() function to construct
    the below list 8 . 23 . 11 . 29 . 12 */
    head = push(head, 12);
    head = push(head, 29);
    head = push(head, 11);
    head = push(head, 23);
    head = push(head, 8);
 
    System.out.printf(" %d ", sumAlternateNode(head));
}
}
 
// This code is contributed by Arnab Kundu


Python3




# Python3 code to print the
# sum of Alternate Nodes
import math
 
# Link list node
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None
 
# Function to get the alternate
# nodes of the linked list
def sumAlternateNode(head):
    count = 0
    sum = 0
 
    while (head != None):
 
        # when count is even sum the nodes
        if (count % 2 == 0):
            sum = sum + head.data
 
        # count the nodes
        count = count + 1
 
        # move on the next node.
        head = head.next
     
    return sum
 
# Function to push node at head
def push(head_ref, new_data):
    new_node = Node(new_data)
    new_node.data = new_data
    new_node.next = head_ref
    head_ref = new_node
    return head_ref
 
# Driver code
if __name__=='__main__':
 
    # Start with the empty list
    head = None
 
    # Use push() function to construct
    # the below list 8 . 23 . 11 . 29 . 12
    head = push(head, 12)
    head = push(head, 29)
    head = push(head, 11)
    head = push(head, 23)
    head = push(head, 8)
 
    print(sumAlternateNode(head))
     
# This code is contributed by Srathore


C#




// C# code to print the sum of Alternate Nodes
using System;
 
class GFG
{
     
/* Link list node */
public class Node
{
    public int data;
    public Node next;
};
 
/* Function to get the alternate
nodes of the linked list */
static int sumAlternateNode( Node head)
{
    int count = 0;
    int sum = 0;
 
    while (head != null)
    {
 
        // when count is even sum the nodes
        if (count % 2 == 0)
            sum += head.data;
 
        // count the nodes
        count++;
 
        // move on the next node.
        head = head.next;
    }
    return sum;
}
 
// Function to push node at head
static Node push( Node head_ref, int new_data)
{
    Node new_node =new Node();
    new_node.data = new_data;
    new_node.next = (head_ref);
    (head_ref) = new_node;
    return head_ref;
}
 
// Driver code
public static void Main(String []args)
{
    /* Start with the empty list */
    Node head = null;
 
    /* Use push() function to construct
    the below list 8 . 23 . 11 . 29 . 12 */
    head = push(head, 12);
    head = push(head, 29);
    head = push(head, 11);
    head = push(head, 23);
    head = push(head, 8);
 
    Console.Write(" {0} ", sumAlternateNode(head));
}
}
 
// This code has been contributed by 29AjayKumar


Javascript




<script>
    // javascript code to print the sum of Alternate Nodes     /* Link list node */
    class Node {
        constructor(val) {
            this.data = val;
            this.next = null;
        }
    }
 
    /*
     * Function to get the alternate nodes of the linked list
     */
    function sumAlternateNode(head) {
        var count = 0;
        var sum = 0;
 
        while (head != null) {
 
            // when count is even sum the nodes
            if (count % 2 == 0)
                sum += head.data;
 
            // count the nodes
            count++;
 
            // move on the next node.
            head = head.next;
        }
        return sum;
    }
 
    // Function to push node at head
    function push(head_ref , new_data) {
        var new_node = new Node();
        new_node.data = new_data;
        new_node.next = (head_ref);
        (head_ref) = new_node;
        return head_ref;
    }
 
    // Driver code
     
        /* Start with the empty list */
        var head = null;
 
        /*
         * Use push() function to construct the below list 8 . 23 . 11 . 29 . 12
         */
        head = push(head, 12);
        head = push(head, 29);
        head = push(head, 11);
        head = push(head, 23);
        head = push(head, 8);
 
        document.write( sumAlternateNode(head));
 
// This code contributed by Rajput-Ji
</script>


Output

31

Complexity Analysis:

  • Time Complexity: O(n)
    • As we are traversing the list only once.
  • Auxiliary Space: O(1)
    • As constant extra space is used.

Recursive Approach:

  1. Initialize a static variable(say flag).
  2. If the flag is odd, add the node with the sum.
  3. Increase head and flag by 1, and recurse for next nodes.

Below is the implementation of this approach: 

C++




// CPP code to print sum of alternate nodes
// of a linked list using recursion
#include <bits/stdc++.h>
using namespace std;
 
// A linked list node
struct Node {
    int data;
    struct Node* next;
};
 
// Inserting node at the beginning
void push(struct Node** head_ref, int new_data)
{
    struct Node* new_node = new Node();
    new_node->data = new_data;
    new_node->next = (*head_ref);
    (*head_ref) = new_node;
}
 
// Function to find sum of alternate
// nodes of linked list.
// The boolean flag isOdd is used to find
// if the current node is even or odd.
void productAlternateNodes(struct Node* node,
                           int& sum, bool isOdd = true)
{
    if (node == NULL)
        return;
 
    if (isOdd == true)
        sum = sum + (node->data);
 
    productAlternateNodes(node->next, sum, !isOdd);
}
 
// Driver code
int main()
{
    // Start with the empty list
    struct Node* head = NULL;
 
    // construct below list
    // 8 -> 23 -> 11 -> 29 -> 12
 
    push(&head, 12);
    push(&head, 29);
    push(&head, 11);
    push(&head, 23);
    push(&head, 8);
 
    int sum = 0;
 
    productAlternateNodes(head, sum);
 
    cout << sum;
 
    return 0;
}


Java




// Java code to print sum of alternate nodes
// of a linked list using recursion
 
class GFG
{
     
// Start with the empty list
static Node head=null;
 
static int sum;
 
// A linked list node
static class Node
{
    int data;
    Node next;
};
 
// Inserting node at the beginning
static Node push(Node head_ref, int new_data)
{
    Node new_node = new Node();
    new_node.data = new_data;
    new_node.next = head_ref;
    head_ref = new_node;
    return head=head_ref;
}
 
// Function to find sum of alternate
// nodes of linked list.
// The boolean flag isOdd is used to find
// if the current node is even or odd.
static void productAlternateNodes(Node node, boolean isOdd)
{
    if (node == null)
        return;
 
    if (isOdd == true)
        sum = sum + (node.data);
 
    productAlternateNodes(node.next, !isOdd);
}
 
// Driver code
public static void main(String[] args)
{
    // construct below list
    // 8 . 23 . 11 . 29 . 12
 
    push(head, 12);
    push(head, 29);
    push(head, 11);
    push(head, 23);
    push(head, 8);
 
    sum = 0;
 
    productAlternateNodes(head,true);
 
    System.out.println(sum);
}
}
 
/* This code is contributed by PrinciRaj1992 */


Python3




# Python code to print sum of alternate nodes
# of a linked list using recursion
 
# Link list node
class Node:
     
    def __init__(self, data):
        self.data = data
        self.next = next
         
# function to insert a node at the
# beginning of the linked list
def push(head_ref, new_data):
 
    # allocate node
    new_node = Node(0)
 
    # put in the data
    new_node.data = new_data
 
    # link the old list to the new node
    new_node.next = (head_ref)
 
    # move the head to point to the new node
    (head_ref) = new_node
     
    return head_ref
     
sum = 0;
 
# Function to find sum of alternate
# nodes of linked list.
# The boolean flag isOdd is used to find
# if the current node is even or odd.
def subtractAlternateNodes(node, isOdd ):
 
    global sum
     
    if (node == None):
        return;
 
    if (isOdd == True):
        if (sum == 0) :
            sum = node.data;
         
        else :
            sum = sum + (node.data);
         
    subtractAlternateNodes(node.next, not isOdd);
 
# Driver code
 
# Start with the empty list
head = None;
 
# Construct below list
# 8 -> 23 -> 11 -> 29 -> 12
 
head = push(head, 12);
head = push(head, 29);
head = push(head, 11);
head = push(head, 23);
head = push(head, 8);
 
sum = 0;
 
subtractAlternateNodes(head, True);
 
print( sum);
 
# This code is contributed by Arnab Kundu


C#




// C# code to print sum of alternate nodes
// of a linked list using recursion
using System;
     
class GFG
{
     
// Start with the empty list
static Node head = null;
 
static int sum;
 
// A linked list node
public class Node
{
    public int data;
    public Node next;
};
 
// Inserting node at the beginning
static Node push(Node head_ref, int new_data)
{
    Node new_node = new Node();
    new_node.data = new_data;
    new_node.next = head_ref;
    head_ref = new_node;
    return head=head_ref;
}
 
// Function to find sum of alternate
// nodes of linked list.
// The boolean flag isOdd is used to find
// if the current node is even or odd.
static void productAlternateNodes(Node node, bool isOdd)
{
    if (node == null)
        return;
 
    if (isOdd == true)
        sum = sum + (node.data);
 
    productAlternateNodes(node.next, !isOdd);
}
 
// Driver code
public static void Main(String[] args)
{
    // construct below list
    // 8 -> 23 -> 11 -> 29 -> 12
 
    push(head, 12);
    push(head, 29);
    push(head, 11);
    push(head, 23);
    push(head, 8);
 
    sum = 0;
 
    productAlternateNodes(head,true);
 
    Console.WriteLine(sum);
}
}
 
// This code is contributed by Rajput-Ji


Javascript




<script>
 
      // JavaScript code to print sum of alternate nodes
      // of a linked list using recursion
      // Start with the empty list
      var head = null;
 
      var sum;
 
      // A linked list node
      class Node {
        constructor() {
          this.data = 0;
          this.next = null;
        }
      }
 
      // Inserting node at the beginning
      function push(head_ref, new_data) {
        var new_node = new Node();
        new_node.data = new_data;
        new_node.next = head_ref;
        head_ref = new_node;
        return (head = head_ref);
      }
 
      // Function to find sum of alternate
      // nodes of linked list.
      // The boolean flag isOdd is used to find
      // if the current node is even or odd.
      function productAlternateNodes(node, isOdd) {
        if (node == null) return;
 
        if (isOdd == true) sum = sum + node.data;
 
        productAlternateNodes(node.next, !isOdd);
      }
 
      // Driver code
      // construct below list
      // 8 -> 23 -> 11 -> 29 -> 12
 
      push(head, 12);
      push(head, 29);
      push(head, 11);
      push(head, 23);
      push(head, 8);
 
      sum = 0;
 
      productAlternateNodes(head, true);
 
      document.write(sum);
       
</script>


Output

31

 Complexity Analysis:

  • Time Complexity: O(n)
    • As we are traversing the list only once.
  • Auxiliary Space: O(1)
    • At first this might look to use O(n) extra space due to recursion call stack but here function is the tail recursive function and thus the compilers optimize it to use constant extra space. 
Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Recent Comments