Skip to content
Related Articles

Related Articles

Improve Article
Sum of all subset sums of a linked list
  • Last Updated : 29 Apr, 2020

Given a linked list, the task is to find the sum of all subsets of a linked list.

Examples:

Input: 2 -> 3 -> NULL
Output: 10
Explanation:
All non-empty subsets are {2}, {3} and {2, 3}
Total sum = 2 + 3 + (2 + 3) = 10

Input: 2 -> 1 -> 5 -> 6 -> NULL
Output: 112

Approach: Considering all the possible subsets, we can observe that each node appears 2(N – 1) times. Thus, the product of sum of all nodes and 2(N – 1) gives us the final answer.



Below is the implementation of the above approach:

C++




// C++ implementation to find the
// sum of values of all subsets of linked list.
#include <bits/stdc++.h>
using namespace std;
  
/* A Linked list node */
struct Node {
    int data;
    struct Node* next;
};
  
// function to insert a node at the
// beginning of the linked list
void push(struct Node** head_ref, int new_data)
{
    /* allocate node */
    struct Node* new_node = new Node;
  
    /* 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;
}
  
// function to find the
// sum of values of all subsets of linked list.
int sumOfNodes(struct Node* head)
{
    struct Node* ptr = head;
    int sum = 0;
    int n = 0; // size of linked list
    while (ptr != NULL) {
  
        sum += ptr->data;
        ptr = ptr->next;
        n++;
    }
  
    // Every element appears 2^(n-1) times
    sum = sum * pow(2, n - 1);
    return sum;
}
  
// Driver program to test above
int main()
{
    struct Node* head = NULL;
  
    // create linked list 2->1->5->6
    push(&head, 2);
    push(&head, 1);
    push(&head, 5);
    push(&head, 6);
  
    cout << sumOfNodes(head);
    return 0;
}

Java




// Java implementation to find the
// sum of values of all subsets of linked list.
  
import java.util.*;
  
class GFG{
   
/* A Linked list node */
static class Node {
    int data;
    Node next;
};
   
// function to insert a node at the
// beginning of the linked list
static Node push(Node head_ref, int new_data)
{
    /* allocate node */
    Node new_node = new Node();
   
    /* 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;
}
   
// function to find the
// sum of values of all subsets of linked list.
static int sumOfNodes(Node head)
{
    Node ptr = head;
    int sum = 0;
    int n = 0; // size of linked list
    while (ptr != null) {
   
        sum += ptr.data;
        ptr = ptr.next;
        n++;
    }
   
    // Every element appears 2^(n-1) times
    sum = (int) (sum * Math.pow(2, n - 1));
    return sum;
}
   
// Driver program to test above
public static void main(String[] args)
{
    Node head = null;
   
    // create linked list 2.1.5.6
    head = push(head, 2);
    head = push(head, 1);
    head = push(head, 5);
    head = push(head, 6);
   
    System.out.print(sumOfNodes(head));
}
}
  
// This code is contributed by 29AjayKumar

Python3




# Python3 implementation to find the
# sum of values of all subsets of linked list.
  
# A Linked list node 
class Node: 
    def __init__(self,data): 
        self.data = data 
        self.next = None
  
# function to insert a node at the
# beginning of the linked list
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
  
# function to find the
# sum of values of all subsets of linked list.
def sumOfNodes(head):
    ptr = head
    sum = 0
    n = 0 # size of linked list
    while (ptr != None) :
  
        sum += ptr.data
        ptr = ptr.next
        n += 1
      
    # Every element appears 2^(n-1) times
    sum = sum * pow(2, n - 1)
    return sum
  
# Driver program to test above
if __name__=='__main__'
  
    head = None
  
    # create linked list 2.1.5.6
    head = push(head, 2)
    head = push(head, 1)
    head = push(head, 5)
    head = push(head, 6)
  
    print(sumOfNodes(head))
      
# This code is contributed by AbhiThakur

C#




// C# implementation to find the
// sum of values of all subsets of linked list.
using System;
  
class GFG{
    
/* A Linked list node */
class Node {
    public int data;
    public Node next;
};
    
// function to insert a node at the
// beginning of the linked list
static Node push(Node head_ref, int new_data)
{
    /* allocate node */
    Node new_node = new Node();
    
    /* 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;
}
    
// function to find the
// sum of values of all subsets of linked list.
static int sumOfNodes(Node head)
{
    Node ptr = head;
    int sum = 0;
    int n = 0; // size of linked list
    while (ptr != null) {
    
        sum += ptr.data;
        ptr = ptr.next;
        n++;
    }
    
    // Every element appears 2^(n-1) times
    sum = (int) (sum * Math.Pow(2, n - 1));
    return sum;
}
    
// Driver program to test above
public static void Main(String[] args)
{
    Node head = null;
    
    // create linked list 2.1.5.6
    head = push(head, 2);
    head = push(head, 1);
    head = push(head, 5);
    head = push(head, 6);
    
    Console.Write(sumOfNodes(head));
}
}
  
// This code is contributed by Rajput-Ji
Output:
112

Time Complexity: O(N)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live 




My Personal Notes arrow_drop_up
Recommended Articles
Page :