Dados dos números representados por listas enlazadas, escribe una función que devuelva la multiplicación de estas dos listas enlazadas.
Ejemplos:
C++
// C++ program to Multiply two numbers // represented as linked lists #include<bits/stdc++.h> #include<stdio.h> using namespace std; // Linked list node 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 new_node->next = (*head_ref); // move the head to point to the new node (*head_ref) = 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; } // This code is contributed by Sania Kumari Gupta (kriSania804)
C
// C program to Multiply two numbers // represented as linked lists #include <stdio.h> #include <stdlib.h> // Linked list node typedef struct Node { int data; struct Node* next; } Node; // Function to create a new node // with given data struct Node* newNode(int data) { Node* new_node = (Node*)malloc(sizeof(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 new_node->next = (*head_ref); // move the head to point to the new node (*head_ref) = 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) { printf("%d", node->data); if (node->next) printf("->"); node = node->next; } printf("\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 printf("Result is: "); printf("%lld", multiplyTwoLists(first, second)); return 0; } // This code is contributed by Sania Kumari Gupta // (kriSania804)
Java
// Java program to Multiply two numbers // represented as linked lists import java.util.*; public class GFG{ // Linked list node 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 # represented as Linked Lists # Linked list node class class Node: # Function to initialize the node def __init__(self, data): self.data = data self.next = None # Linked List Class class LinkedList: # Function to initialize the # LinkedList class. def __init__(self): # Initialize head as None self.head = None # 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 new_node.next = self.head # Move the head to point to new Node self.head = new_node # Function to print the Linked List def printList(self): ptr = self.head 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 first_ptr = first.head second_ptr = second.head 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__': first = LinkedList() second = LinkedList() # Create first Linked List 9->4->6 first.push(6) first.push(4) first.push(9) # Printing first Linked List print("First list is: ", end = '') first.printList() # Create second Linked List 8->4 second.push(4) second.push(8) # Printing second Linked List 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
C#
// C++ program to Multiply two numbers // represented as linked lists using System; public class GFG { // Linked list node public class Node { public int data; public Node next; public Node(int data) { this.data = data; this.next = null; } } // Multiply contents of two linked lists public static long multiplyTwoLists(Node first, Node second) { var N = 1000000007; var num1 = 0; var 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 public static void printList(Node node) { while (node != null) { Console.Write(node.data); if (node.next != null) { Console.Write("->"); } node = node.next; } Console.WriteLine(); } // Driver program to test above function public static void Main(String[] args) { // create first list 9->4->6 var first = new Node(9); first.next = new Node(4); first.next.next = new Node(6); Console.Write("First List is: "); GFG.printList(first); // create second list 8->4 var second = new Node(8); second.next = new Node(4); Console.Write("Second List is: "); GFG.printList(second); // Multiply the two lists and see result Console.Write("Result is: "); Console.WriteLine( GFG.multiplyTwoLists(first, second)); } } // This code is contributed by mukulsomukesh
Javascript
<script> // Javascript program to Multiply two numbers // represented as linked lists // Linked list node 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>
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA