Multiply two numbers represented by Linked Lists

• Difficulty Level : Easy
• Last Updated : 07 Jul, 2021

Given two numbers represented by linked lists, write a function that returns the multiplication of these two linked lists.

Examples:

Input : 9->4->6
8->4
Output : 79464

Input : 3->2->1
1->2
Output : 3852

Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

Solution
Traverse both lists and generate the required numbers to be multiplied and then return the multiplied values of the two numbers.
Algorithm to generate the number from linked list representation:

1) Initialize a variable to zero
2) Start traversing the linked list
3) Add the value of first node to this variable
4) From the second node, multiply the variable by 10
and also take modulus of this value by 10^9+7
and then add the value of the node to this
variable.
5) Repeat step 4 until we reach the last node of the list.

Use the above algorithm with both of linked lists to generate the numbers.

Below is the program for multiplying two numbers represented as linked lists:

C++

// C++ program to Multiply two numbers
#include<bits/stdc++.h>
#include<stdio.h>
using namespace std;

struct Node
{
int data;
struct Node* next;
};

// Function to create a new node
// with given data
struct Node *newNode(int data)
{
struct Node *new_node = (struct Node *) malloc(sizeof(struct Node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}

// 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 = newNode(new_data);

// link the old list off the new node

// move the head to point to the new node
}

// Multiply contents of two linked lists
long long multiplyTwoLists (Node* first, Node* second)
{
long long N= 1000000007;
long long num1 = 0, num2 = 0;
while (first || second){

if(first){
num1 = ((num1)*10)%N + first->data;
first = first->next;
}

if(second)
{
num2 = ((num2)*10)%N + second->data;
second = second->next;
}

}
return ((num1%N)*(num2%N))%N;
}

// A utility function to print a linked list
void printList(struct Node *node)
{
while(node != NULL)
{
cout<<node->data;
if(node->next)
cout<<"->";
node = node->next;
}
cout<<"\n";
}

// Driver program to test above function
int main()
{
struct Node* first = NULL;
struct Node* second = NULL;

// create first list 9->4->6
push(&first, 6);
push(&first, 4);
push(&first, 9);
printf("First List is: ");
printList(first);

// create second list 8->4
push(&second, 4);
push(&second, 8);
printf("Second List is: ");
printList(second);

// Multiply the two lists and see result
cout<<"Result is: ";
cout<<multiplyTwoLists(first, second);

return 0;
}

Java

// Java program to Multiply two numbers
import java.util.*;

public class GFG{

static class Node
{
int data;
Node next;

Node(int data){
this.data = data;
next = null;
}
}

// Multiply contents of two linked lists
static long multiplyTwoLists(Node first, Node second)
{
long N = 1000000007;
long num1 = 0, num2 = 0;

while (first != null || second !=  null){

if(first != null){
num1 = ((num1)*10)%N + first.data;
first = first.next;
}

if(second != null)
{
num2 = ((num2)*10)%N + second.data;
second = second.next;
}

}
return ((num1%N)*(num2%N))%N;
}

// A utility function to print a linked list
static void printList(Node node)
{
while(node != null)
{
System.out.print(node.data);
if(node.next != null)
System.out.print("->");
node = node.next;
}
System.out.println();
}

// Driver program to test above function
public static void main(String args[])
{
// create first list 9->4->6
Node first = new Node(9);
first.next = new Node(4);
first.next.next = new Node(6);
System.out.print("First List is: ");
printList(first);

// create second list 8->4
Node second = new Node(8);
second.next = new Node(4);
System.out.print("Second List is: ");
printList(second);

// Multiply the two lists and see result
System.out.print("Result is: ");
System.out.println(multiplyTwoLists(first, second));
}
}

// This code is contributed by adityapande88

Python3

# Python3 to multiply two numbers

class Node:

# Function to initialize the node
def __init__(self, data):

self.data = data
self.next = None

# Function to initialize the
def __init__(self):

# Function to insert a node at the
# beginning of the Linked List
def push(self, new_data):

# Create a new Node
new_node = Node(new_data)

# Make next of the new Node as head

# Move the head to point to new Node

# Function to print the Linked List
def printList(self):

while (ptr != None):
print(ptr.data, end = '')
if ptr.next != None:
print('->', end = '')

ptr = ptr.next

print()

# Multiply contents of two Linked Lists
def multiplyTwoLists(first, second):

num1 = 0
num2 = 0

while first_ptr != None or second_ptr != None:
if first_ptr != None:
num1 = (num1 * 10) + first_ptr.data
first_ptr = first_ptr.next

if second_ptr != None:
num2 = (num2 * 10) + second_ptr.data
second_ptr = second_ptr.next

return num1 * num2

# Driver code
if __name__=='__main__':

# Create first Linked List 9->4->6
first.push(6)
first.push(4)
first.push(9)

print("First list is: ", end = '')
first.printList()

# Create second Linked List 8->4
second.push(4)
second.push(8)

print("Second List is: ", end = '')
second.printList()

# Multiply two linked list and
# print the result
result = multiplyTwoLists(first, second)
print("Result is: ", result)

# This code is contributed by kirtishsurangalikar

Javascript

<script>
// Javascript program to Multiply two numbers

class Node
{
constructor(data)
{
this.data=data;
this.next = null;
}
}

// Multiply contents of two linked lists
function multiplyTwoLists(first,second)
{
let N = 1000000007;
let num1 = 0, num2 = 0;

while (first != null || second !=  null){

if(first != null){
num1 = ((num1)*10)%N + first.data;
first = first.next;
}

if(second != null)
{
num2 = ((num2)*10)%N + second.data;
second = second.next;
}

}
return ((num1%N)*(num2%N))%N;
}

// A utility function to print a linked list
function printList(node)
{
while(node != null)
{
document.write(node.data);
if(node.next != null)
document.write("->");
node = node.next;
}
document.write("<br>");
}

// Driver program to test above function
// create first list 9->4->6
let first = new Node(9);
first.next = new Node(4);
first.next.next = new Node(6);
document.write("First List is: ");
printList(first);

// create second list 8->4
let second = new Node(8);
second.next = new Node(4);
document.write("Second List is: ");
printList(second);

// Multiply the two lists and see result
document.write("Result is: ");
document.write(multiplyTwoLists(first, second)+"<br>");

// This code is contributed by avanitrachhadiya2155
</script>
Output
First List is: 9->4->6
Second List is: 8->4
Result is: 79464

?list=PLqM7alHXFySH41ZxzrPNj2pAYPOI8ITe7