# Sum of all odd frequency nodes of the Linked List

• Last Updated : 19 Aug, 2021

Given a linked list, the task is to find the sum of all the odd frequency nodes from the given linked list.
Examples:

Input: 8 -> 8 -> 1 -> 4 -> 1 -> 2 -> 8 -> NULL
Output: 30
freq(8) = 3
freq(1) = 2
freq(4) = 1
freq(2) = 1
8, 4 and 2 appear odd number of times and (8 * 3) + (4 * 1) + (2 * 1) = 30
Input: 6 -> 2 -> 2 -> 6 -> 2 -> 1 -> NULL
Output:

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 experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

Approach: This problem can be solved by hashing

1. Create a hash to store the frequencies of the nodes.
2. Traverse the Linked List and update the frequencies of the nodes in the hash variable.
3. Now, traverse the linked list again and for every node that appears odd number of times, add its value to the running sum.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of above approach``#include``using` `namespace` `std;` `// Node class``struct` `Node``{``    ``int` `data;``    ``Node* next;``    ``Node(``int` `d)``    ``{``        ``data = d;``        ``next = NULL;``    ``}``} ;` `// Function to push the new node``// to head of the linked list``Node* push(Node* head,``int` `data)``{``    ``// If head is null return new node as head``    ``if` `(!head)``        ``return` `new` `Node(data);``    ``Node* temp =``new` `Node(data);``    ``temp->next = head;``    ``head = temp;``    ``return` `head;``}` `// Function to find the sum of all odd``// frequency nodes of the linked list``int` `sumOfOddFreqEle(Node* head)``{``    ``// Hash to store the frequencies of``    ``// the nodes of the linked list``    ``map<``int``,``int``> mp ;``    ``Node* temp = head;``    ``while``(temp)``    ``{``        ``int` `d = temp->data;``        ``mp[d]++;``        ``temp = temp->next;``    ``}``    ` `    ``// Initialize total_sum as zero``    ``int` `total_sum = 0;` `    ``// Traverse through the map to get the sum``    ``for` `(``auto` `i : mp)``    ``{` `        ``// If it appears for odd number of``        ``// times then add it to the sum``        ``if` `(i.second % 2 == 1)``            ``total_sum+=(i.second * i.first);``    ``}``    ``return` `total_sum;``}` `// Driver code``int` `main()``{``    ``Node* head = NULL;``    ``head = push(head, 8);``    ``head = push(head, 2);``    ``head = push(head, 1);``    ``head = push(head, 4);``    ``head = push(head, 1);``    ``head = push(head, 8);``    ``head = push(head, 8);` `    ``cout<<(sumOfOddFreqEle(head));` `    ``return` `0;``}` `// This code is contributed by Arnab Kundu`

## Java

 `// Java implementation of the approach``import` `java.util.*;``class` `GFG``{` `// Node class``static` `class` `Node``{``    ``int` `data;``    ``Node next;``    ``Node(``int` `d)``    ``{``        ``data = d;``        ``next = ``null``;``    ``}``};` `// Function to push the new node``// to head of the linked list``static` `Node push(Node head,``int` `data)``{``    ``// If head is null return new node as head``    ``if` `(head == ``null``)``        ``return` `new` `Node(data);``    ``Node temp = ``new` `Node(data);``    ``temp.next = head;``    ``head = temp;``    ``return` `head;``}` `// Function to find the sum of all odd``// frequency nodes of the linked list``static` `int` `sumOfOddFreqEle(Node head)``{``    ``// Hash to store the frequencies of``    ``// the nodes of the linked list``    ``HashMap mp =``         ``new` `HashMap();``    ``Node temp = head;``    ``while``(temp != ``null``)``    ``{``        ``int` `d = temp.data;``        ``if``(mp.containsKey(d))``        ``{``            ``mp.put(d, mp.get(d) + ``1``);``        ``}``        ``else``        ``{``            ``mp.put(d, ``1``);``        ``}``        ``temp = temp.next;``    ``}``    ` `    ``// Initialize total_sum as zero``    ``int` `total_sum = ``0``;` `    ``// Traverse through the map to get the sum``    ``for` `(Map.Entry i : mp.entrySet())``    ``{` `        ``// If it appears for odd number of``        ``// times then add it to the sum``        ``if` `(i.getValue() % ``2` `== ``1``)``            ``total_sum+=(i.getValue() * i.getKey());``    ``}``    ``return` `total_sum;``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``Node head = ``null``;``    ``head = push(head, ``8``);``    ``head = push(head, ``2``);``    ``head = push(head, ``1``);``    ``head = push(head, ``4``);``    ``head = push(head, ``1``);``    ``head = push(head, ``8``);``    ``head = push(head, ``8``);` `    ``System.out.println((sumOfOddFreqEle(head)));``}``}` `// This code is contributed by Rajput-Ji`

## Python

 `# Python implementation of the approach` `# Node class``class` `Node:``    ``def` `__init__(``self``, data):``        ``self``.data ``=` `data``        ``self``.``next` `=` `None` `# Function to push the new node``# to head of the linked list``def` `push(head, data):` `    ``# If head is null return new node as head``    ``if` `not` `head:``        ``return` `Node(data)``    ``temp ``=` `Node(data)``    ``temp.``next` `=` `head``    ``head ``=` `temp``    ``return` `head` `# Function to find the sum of all odd``# frequency nodes of the linked list``def` `sumOfOddFreqEle(head):` `    ``# Hash to store the frequencies of``    ``# the nodes of the linked list``    ``mp ``=``{}``    ``temp ``=` `head``    ``while``(temp):``        ``d ``=` `temp.data``        ``if` `d ``in` `mp:``            ``mp[d]``=` `mp.get(d)``+``1``        ``else``:``            ``mp[d]``=` `1``        ``temp ``=` `temp.``next``    ` `    ``# Initialize total_sum as zero``    ``total_sum ``=` `0` `    ``# Traverse through the map to get the sum``    ``for` `digit ``in` `mp:` `        ``# keep tracking the to``        ``tms ``=` `mp.get(digit)` `        ``# If it appears for odd number of``        ``# times then add it to the sum``        ``if` `tms ``%` `2` `=``=` `1``:``            ``total_sum``+``=``(tms ``*` `digit)``    ``return` `total_sum` `# Driver code``if` `__name__``=``=``'__main__'``:``    ``head ``=` `None``    ``head ``=` `push(head, ``8``)``    ``head ``=` `push(head, ``2``)``    ``head ``=` `push(head, ``1``)``    ``head ``=` `push(head, ``4``)``    ``head ``=` `push(head, ``1``)``    ``head ``=` `push(head, ``8``)``    ``head ``=` `push(head, ``8``)` `    ``print``(sumOfOddFreqEle(head))`

## C#

 `// C# implementation of the approach``using` `System;``using` `System.Collections.Generic;` `class` `GFG``{` `// Node class``public` `class` `Node``{``    ``public` `int` `data;``    ``public` `Node next;``    ``public` `Node(``int` `d)``    ``{``        ``data = d;``        ``next = ``null``;``    ``}``};` `// Function to push the new node``// to head of the linked list``static` `Node push(Node head,``int` `data)``{``    ``// If head is null,``    ``// return new node as head``    ``if` `(head == ``null``)``        ``return` `new` `Node(data);``    ``Node temp = ``new` `Node(data);``    ``temp.next = head;``    ``head = temp;``    ``return` `head;``}` `// Function to find the sum of all odd``// frequency nodes of the linked list``static` `int` `sumOfOddFreqEle(Node head)``{``    ``// Hash to store the frequencies of``    ``// the nodes of the linked list``    ``Dictionary<``int``,``               ``int``> mp = ``new` `Dictionary<``int``,``                                        ``int``>();``    ``Node temp = head;``    ``while``(temp != ``null``)``    ``{``        ``int` `d = temp.data;``        ``if``(mp.ContainsKey(d))``        ``{``            ``mp[d] = mp[d] + 1;``        ``}``        ``else``        ``{``            ``mp.Add(d, 1);``        ``}``        ``temp = temp.next;``    ``}``    ` `    ``// Initialize total_sum as zero``    ``int` `total_sum = 0;` `    ``// Traverse through the map to get the sum``    ``foreach``(KeyValuePair<``int``, ``int``> i ``in` `mp)``    ``{` `        ``// If it appears for odd number of``        ``// times then add it to the sum``        ``if` `(i.Value % 2 == 1)``            ``total_sum += (i.Value * i.Key);``    ``}``    ``return` `total_sum;``}` `// Driver code``public` `static` `void` `Main(String[] args)``{``    ``Node head = ``null``;``    ``head = push(head, 8);``    ``head = push(head, 2);``    ``head = push(head, 1);``    ``head = push(head, 4);``    ``head = push(head, 1);``    ``head = push(head, 8);``    ``head = push(head, 8);` `    ``Console.WriteLine((sumOfOddFreqEle(head)));``}``}` `// This code is contributed by Rajput-Ji`

## Javascript

 ``
Output:
`30`

Time Complexity: O(N*logN)
Auxiliary Space: O(N)

My Personal Notes arrow_drop_up