Сумма всех нечетных частотных узлов Связанного списка
Учитывая связанный список, задача состоит в том, чтобы найти сумму всех нечетных частотных узлов из данного связанного списка.
Примеры:
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) = 30Input: 6 -> 2 -> 2 -> 6 -> 2 -> 1 -> NULL
Output: 7
Рекомендуется: сначала попробуйте свой подход в {IDE}, прежде чем переходить к решению.
Подход: эту проблему можно решить с помощью хеширования,
- Создайте хеш для хранения частот узлов.
- Просмотрите связанный список и обновите частоты узлов в хеш-переменной.
- Теперь просмотрите связанный список еще раз и для каждого узла, который появляется нечетное количество раз, добавьте его значение к текущей сумме.
Below is the implementation of the above approach:
C++
// C++ implementation of above approach #include<bits/stdc++.h> 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<Integer, Integer> mp = new HashMap<Integer, Integer>(); 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<Integer, Integer> 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 |
30
Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .
Если вы хотите посещать живые занятия с отраслевыми экспертами, пожалуйста, обращайтесь к Geeks Classes Live и Geeks Classes Live USA.