Find the product of first k nodes of the given Linked List

Given a pointer to the head of a singly linked list and an integer k. The task is to find the product of first k nodes of the linked list.

Examples:

Input: 10 -> 6 -> 8 -> 4 -> 12, k = 2
Output: 60
10 * 6 = 60



Input: 15 -> 7 -> 9 -> 5 -> 16 -> 14, k = 4
Output: 4725
15 * 7 * 9 * 5 = 4725

Approach: Set prod = 1 (required product) and count = 0 (count of nodes traversed). Now, start traversing the nodes of the linked list from left to right and update count = count + 1 and prod = prod * currNode -> data with every traversed node while count < k. Print the value of prod in the end.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find the product of first
// 'k' nodes of the Linked List
#include <bits/stdc++.h>
using namespace std;
#define ll long long int
  
/* 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 return the product of
// first k nodes of the given linked list
ll product(struct Node* head, int k)
{
    if (k <= 0)
        return 0;
  
    ll prod = 1;
    int i = 0;
    Node* node = head;
  
    // Traverse the list from left to right
    while (i < k) {
  
        // Update product
        prod = prod * node->data;
  
        // Move to the next node
        node = node->next;
        i++;
    }
  
    // Return the required product
    return prod;
}
  
// Driver code
int main()
{
    struct Node* head = NULL;
  
    // Linked list 10 -> 6 -> 8 -> 4 -> 12
    push(&head, 12);
    push(&head, 4);
    push(&head, 8);
    push(&head, 6);
    push(&head, 10);
  
    int k = 2;
    cout << product(head, k);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find the product of first
// 'k' nodes of the Linked List
class Solution
{
  
/* 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 return the product of
// first k nodes of the given linked list
static long product( Node head, int k)
{
    if (k <= 0)
        return 0;
  
    long prod = 1;
    int i = 0;
    Node node = head;
  
    // Traverse the list from left to right
    while (i < k)
    {
  
        // Update product
        prod = prod * node.data;
  
        // Move to the next node
        node = node.next;
        i++;
    }
  
    // Return the required product
    return prod;
}
  
// Driver code
public static void main(String args[])
{
    Node head = new Node();
  
    // Linked list 10 . 6 . 8 . 4 . 12
    head=push(head, 12);
    head=push(head, 4);
    head=push(head, 8);
    head=push(head, 6);
    head=push(head, 10);
  
    int k = 2;
    System.out.println( product(head, k));
      
}
}
  
// This code is contributed by Arnab Kundu

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

      
# Python3 program to find the product 
# of first 'k' nodes of the Linked List
import math
  
#define ll long long 
  
# 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 po to the new node 
    head_ref = new_node
    return head_ref
  
# Function to return the product of
# first k nodes of the given linked list
def product(head, k):
    if (k <= 0):
        return 0
  
    prod = 1
    i = 0
    node = head
  
    # Traverse the list from left to right
    while (i < k):
  
        # Update product
        prod = prod * node.data
  
        # Move to the next node
        node = node.next
        i = i + 1
      
    # Return the required product
    return prod
  
# Driver code
if __name__=='__main__':
    head = None
  
    # Linked list 10 . 6 . 8 . 4 . 12
    head = push(head, 12);
    head = push(head, 4);
    head = push(head, 8);
    head = push(head, 6);
    head = push(head, 10);
  
    k = 2
    print(product(head, k))
      
# This code is contributed by Srathore

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find the product of first
// 'k' nodes of the 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 return the product of
// first k nodes of the given linked list
static long product( Node head, int k)
{
    if (k <= 0)
        return 0;
  
    long prod = 1;
    int i = 0;
    Node node = head;
  
    // Traverse the list from left to right
    while (i < k)
    {
  
        // Update product
        prod = prod * node.data;
  
        // Move to the next node
        node = node.next;
        i++;
    }
  
    // Return the required product
    return prod;
}
  
// Driver code
public static void Main()
{
    Node head = new Node();
  
    // Linked list 10 . 6 . 8 . 4 . 12
    head=push(head, 12);
    head=push(head, 4);
    head=push(head, 8);
    head=push(head, 6);
    head=push(head, 10);
  
    int k = 2;
    Console.WriteLine( product(head, k));
}
}
  
// This code is contributed by PrinciRaj1992

chevron_right


Output:

60


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.





Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.