Suma de todos los Nodes de frecuencias impares de la Lista Vinculada

Dada una lista enlazada, la tarea es encontrar la suma de todos los Nodes de frecuencias impares de la lista enlazada dada.
Ejemplos: 
 

Entrada: 8 -> 8 -> 1 -> 4 -> 1 -> 2 -> 8 -> NULL 
Salida: 30 
frecuencia(8) = 3 
frecuencia(1) = 2 
frecuencia(4) = 1 
frecuencia(2) = 1 
8, 4 y 2 aparecen un número impar de veces y (8 * 3) + (4 * 1) + (2 * 1) = 30
Entrada: 6 -> 2 -> 2 -> 6 -> 2 -> 1 – > 
Salida NULA:
 

Enfoque: este problema se puede resolver mediante hash
 

  1. Crea un hash para almacenar las frecuencias de los Nodes.
  2. Recorra la lista enlazada y actualice las frecuencias de los Nodes en la variable hash.
  3. Ahora, recorra la lista enlazada nuevamente y para cada Node que aparezca un número impar de veces, agregue su valor a la suma acumulada.

A continuación se muestra la implementación del enfoque anterior: 
 

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

Javascript

<script>
 
      // JavaScript implementation of the approach
      // Node class
      class Node {
        constructor(d) {
          this.data = d;
          this.next = null;
        }
      }
 
      // Function to push the new node
      // to head of the linked list
      function push(head, data) {
        // If head is null,
        // return new node as head
        if (head == null) return new Node(data);
        var 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
      function sumOfOddFreqEle(head) {
        // Hash to store the frequencies of
        // the nodes of the linked list
        var mp = {};
        var temp = head;
        while (temp != null) {
          var d = temp.data;
          if (mp.hasOwnProperty(d)) {
            mp[d] = mp[d] + 1;
          } else {
            mp[d] = 1;
          }
          temp = temp.next;
        }
 
        // Initialize total_sum as zero
        var total_sum = 0;
 
        // Traverse through the map to get the sum
        for (const [key, value] of Object.entries(mp)) {
          // If it appears for odd number of
          // times then add it to the sum
          if (value % 2 == 1) total_sum += value * key;
        }
        return total_sum;
      }
 
      // Driver code
      var 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);
 
      document.write(sumOfOddFreqEle(head) + "<br>");
       
</script>
Producción: 

30

 

Complejidad de tiempo: O(N*logN)
Espacio auxiliar: O(N) 

Publicación traducida automáticamente

Artículo escrito por Vikash Kumar 37 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *