Related Articles
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

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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 ``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.

My Personal Notes arrow_drop_up