Suma y producto de los Nodes de una lista enlazada simple que son divisibles por K

Dada una lista enlazada simple. La tarea es encontrar la suma y el producto de todos los Nodes de la lista enlazada dada que son divisibles por un número k dado.

Ejemplos

Input : List = 7->60->8->40->1
        k = 10 
Output : Product = 2400, Sum = 100
Product of nodes: 60 * 40 = 2400

Input : List = 15->7->3->9->11->5
        k = 5
Output : Product = 75, Sum = 20

Algoritmo:  

  1. Inicialice un puntero ptr con el encabezado de la lista enlazada, una variable de producto con 1 y una variable de suma con 0.
  2. Comience a recorrer la lista vinculada utilizando un bucle hasta que se atraviesen todos los Nodes.
  3. Para cada Node: 
    • Multiplique el valor del Node actual por el producto si el Node actual es divisible por k.
    • Agregue el valor del Node actual a la suma si el Node actual es divisible por k.
  4. Incremente el puntero al siguiente Node de la lista enlazada, es decir, ptr = ptr ->siguiente.
  5. Repita los pasos anteriores hasta llegar al final de la lista enlazada.
  6. Finalmente, imprima el producto y la suma.

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

C++

// C++ implementation to find the product
// and sum of nodes which are divisible by k
 
#include <iostream>
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 product and sum of
// nodes which are divisible by k
// of the given linked list
void productAndSum(struct Node* head, int k)
{
    // Pointer to traverse the list
    struct Node* ptr = head;
 
    int product = 1; // Variable to store product
    int sum = 0; // Variable to store sum
 
    // Traverse the list and
    // calculate the product
    // and sum
    while (ptr != NULL) {
        if (ptr->data % k == 0) {
            product *= ptr->data;
            sum += ptr->data;
        }
 
        ptr = ptr->next;
    }
 
    // Print the product and sum
    cout << "Product = " << product << endl;
    cout << "Sum = " << sum;
}
 
// Driver Code
int main()
{
    struct Node* head = NULL;
 
    // create linked list 70->6->8->4->10
    push(&head, 70);
    push(&head, 6);
    push(&head, 8);
    push(&head, 4);
    push(&head, 10);
 
    int k = 10;
 
    productAndSum(head, k);
 
    return 0;
}

Java

// Java implementation to find the product
// and sum of nodes which are divisible by k
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 product and sum of
// nodes which are divisible by k
// of the given linked list
static void productAndSum( Node head, int k)
{
    // Pointer to traverse the list
    Node ptr = head;
 
    int product = 1; // Variable to store product
    int sum = 0; // Variable to store sum
 
    // Traverse the list and
    // calculate the product
    // and sum
    while (ptr != null)
    {
        if (ptr.data % k == 0)
        {
            product *= ptr.data;
            sum += ptr.data;
        }
 
        ptr = ptr.next;
    }
 
    // Print the product and sum
    System.out.println( "Product = " + product );
    System.out.println( "Sum = " + sum);
}
 
// Driver Code
public static void main(String args[])
{
    Node head = null;
 
    // create linked list 70.6.8.4.10
    head = push(head, 70);
    head = push(head, 6);
    head = push(head, 8);
    head = push(head, 4);
    head = push(head, 10);
 
    int k = 10;
 
    productAndSum(head, k);
 
}
}
 
// This code is contributed by Arnab Kundu

Python3

# Python3 implementation to find the product
# and sum of nodes which are divisible by k
import math
 
# 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):
     
    # allocate node
    new_node =Node(new_data)
 
    # 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 product and sum of
# nodes which are divisible by k
# of the given linked list
def productAndSum(head, k):
     
    # Pointer to traverse the list
    ptr = head
 
    product = 1 # Variable to store product
    add = 0 # Variable to store sum
 
    # Traverse the list and
    # calculate the product
    # and sum
    while (ptr != None):
        if (ptr.data % k == 0):
            product = product * ptr.data
            add = add + ptr.data
     
        ptr = ptr.next
     
    # Print the product and sum
    print("Product =", product)
    print("Sum =", add)
 
# Driver Code
if __name__=='__main__':
 
    head = None
 
    # create linked list 70.6.8.4.10
    head = push(head, 70)
    head = push(head, 6)
    head = push(head, 8)
    head = push(head, 4)
    head = push(head, 10)
 
    k = 10
 
    productAndSum(head, k)
 
# This code is contributed by Srathore

C#

// C# implementation to find the product
// and sum of nodes which are divisible by k
using System;
     
class GFG
{
     
// A Linked list node
public 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 product and sum of
// nodes which are divisible by k
// of the given linked list
static void productAndSum( Node head, int k)
{
    // Pointer to traverse the list
    Node ptr = head;
 
    int product = 1; // Variable to store product
    int sum = 0; // Variable to store sum
 
    // Traverse the list and
    // calculate the product
    // and sum
    while (ptr != null)
    {
        if (ptr.data % k == 0)
        {
            product *= ptr.data;
            sum += ptr.data;
        }
 
        ptr = ptr.next;
    }
 
    // Print the product and sum
    Console.WriteLine( "Product = " + product );
    Console.WriteLine( "Sum = " + sum);
}
 
// Driver Code
public static void Main(String []args)
{
    Node head = null;
 
    // create linked list 70.6.8.4.10
    head = push(head, 70);
    head = push(head, 6);
    head = push(head, 8);
    head = push(head, 4);
    head = push(head, 10);
 
    int k = 10;
 
    productAndSum(head, k);
 
}
}
 
/* This code contributed by PrinciRaj1992 */

Javascript

<script>
 
// Javascript implementation to find the product
// and sum of nodes which are divisible by k    
// A Linked list node
class Node
{
    constructor(val)
    {
        this.data = val;
        this.next = null;
    }
}
 
// Function to insert a node at the
// beginning of the linked list
function push(head_ref, new_data)
{
     
    // Allocate node
    var 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 product and sum of
// nodes which are divisible by k
// of the given linked list
function productAndSum(head, k)
{
     
    // Pointer to traverse the list
    var ptr = head;
     
    // Variable to store product
    var product = 1;
     
    // Variable to store sum
    var sum = 0;
 
    // Traverse the list and
    // calculate the product
    // and sum
    while (ptr != null)
    {
        if (ptr.data % k == 0)
        {
            product *= ptr.data;
            sum += ptr.data;
        }
        ptr = ptr.next;
    }
 
    // Print the product and sum
    document.write("Product = " + product);
    document.write("<br/>Sum = " + sum);
}
 
// Driver Code
var head = null;
 
// Create linked list 70.6.8.4.10
head = push(head, 70);
head = push(head, 6);
head = push(head, 8);
head = push(head, 4);
head = push(head, 10);
 
var k = 10;
 
productAndSum(head, k);
 
// This code is contributed by umadevi9616
 
</script>
Producción: 

Product = 700
Sum = 80

 

Complejidad de tiempo: O(N), donde N es el número de Nodes en la lista enlazada.
 Espacio Auxiliar : O(1)

Publicación traducida automáticamente

Artículo escrito por VishalBachchas 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 *