Given a linked list that contains a series of numbers separated by “0”. Multiply them and store them in the linked list in place.
Note: There will not be continuous zeros in the input.
Examples:
Input : 1->2->3->0->5->4->0->3->2->0 Output : 6->20->6 Input : 1->2->3->4 Output : 1->2->3->4
Approach:
- Start iterating over nodes of the linked list.
- Iterate while temp.data !=0, and multiply these data into a variable ‘prod’.
- When you encounter 0 as the node’s data, change pointers of previous nodes.
Below is the implementation of the above approach:
C++
// C++ program to in-place product linked list // nodes between 0s #include<bits/stdc++.h> using namespace std;
// Linked List Node struct Node
{ int data;
Node* next;
Node( int d)
{
data = d;
next = NULL;
}
}; // Function to traverse and print Linked List void printList(Node* head)
{
while (head->next != NULL)
{
cout<<head->data << "-> " ;
head = head->next;
}
cout << head->data << "\n" ;
}
// Function to in-place product linked list // nodes between 0s // Function to store numbers till 0
void inPlaceStore(Node* head)
{
if (head->data == 0)
{
head = head->next;
}
// To store modified list
Node* res = head;
// Traverse linked list and keep
// adding nodes between 0s.
Node* temp = head;
int prod = 1;
while (temp != NULL)
{
// loop to product the data of nodes till
// it encounters 0
if (temp->data != 0)
{
prod *= temp->data;
temp = temp->next;
}
// If we encounters 0, we need
// to update next pointers
else
{
res->data = prod;
res->next = temp->next;
temp = temp->next;
res = res->next;
prod = 1;
}
}
// For the last segment
res->data = prod;
res->next = temp;
printList(head);
}
// Driver Code
int main()
{
Node *head = new Node(3);
head->next = new Node(2);
head->next->next = new Node(0);
head->next->next->next = new Node(4);
head->next->next->next->next = new Node(5);
head->next->next->next->next->next = new Node(0);
head->next->next->next->next->next->next = new Node(6);
head->next->next->next->next->next->next->next = new Node(7);
inPlaceStore(head);
return 0;
}
// This code is contributed by Arnab Kundu |
Java
// Java program to in-place product linked list // nodes between 0s // Linked List Node class Node {
int data;
Node next;
public Node( int data)
{
this .data = data;
this .next = null ;
}
} // Function to in-place product linked list // nodes between 0s public class inPlaceStoreLL {
// Function to store numbers till 0
static void inPlaceStore(Node head)
{
if (head.data == 0 ) {
head = head.next;
}
// To store modified list
Node res = head;
// Traverse linked list and keep
// adding nodes between 0s.
Node temp = head;
int prod = 1 ;
while (temp != null ) {
// loop to product the data of nodes till
// it encounters 0
if (temp.data != 0 ) {
prod *= temp.data;
temp = temp.next;
}
// If we encounters 0, we need
// to update next pointers
else {
res.data = prod;
res.next = temp.next;
temp = temp.next;
res = res.next;
prod = 1 ;
}
}
// For the last segment
res.data = prod;
res.next = temp;
printList(head);
}
// Function to traverse and print Linked List
static void printList(Node head)
{
while (head.next != null ) {
System.out.print(head.data + "-> " );
head = head.next;
}
System.out.println(head.data);
}
// Driver Code
public static void main(String[] args)
{
Node head = new Node( 3 );
head.next = new Node( 2 );
head.next.next = new Node( 0 );
head.next.next.next = new Node( 4 );
head.next.next.next.next = new Node( 5 );
head.next.next.next.next.next = new Node( 0 );
head.next.next.next.next.next.next = new Node( 6 );
head.next.next.next.next.next.next.next = new Node( 7 );
inPlaceStore(head);
}
} |
Python3
# Python3 program to in-place # product linked list nodes between 0s import math
# Linked List Node class Node:
def __init__( self , data):
self .data = data
self . next = None
# Function to traverse and print Linked List def printList(head):
while (head. next ! = None ):
print (head.data, end = "->" )
head = head. next
print (head.data)
print ()
# Function to in-place product linked list # nodes between 0s # Function to store numbers till 0 def inPlaceStore(head):
if (head.data = = 0 ):
head = head. next
# To store modified list
res = head
# Traverse linked list and keep
# adding nodes between 0s.
temp = head
prod = 1
while (temp ! = None ):
# loop to product the data of nodes till
# it encounters 0
if (temp.data ! = 0 ):
prod = prod * temp.data
temp = temp. next
# If we encounters 0, we need
# to update next pointers
else :
res.data = prod
res. next = temp. next
temp = temp. next
res = res. next
prod = 1
# For the last segment
res.data = prod
res. next = temp
printList(head)
# Driver Code if __name__ = = '__main__' :
head = Node( 3 )
head. next = Node( 2 )
head. next . next = Node( 0 )
head. next . next . next = Node( 4 )
head. next . next . next . next = Node( 5 )
head. next . next . next . next . next = Node( 0 )
head. next . next . next . next . next . next = Node( 6 )
head. next . next . next . next . next . next . next = Node( 7 )
inPlaceStore(head)
# This code is contributed by Srathore |
C#
// C# program to in-place product linked list // nodes between 0s using System;
// Linked List Node public class Node
{ public int data;
public Node next;
public Node( int data)
{
this .data = data;
this .next = null ;
}
} // Function to in-place product linked list // nodes between 0s public class inPlaceStoreLL
{ // Function to store numbers till 0
static void inPlaceStore(Node head)
{
if (head.data == 0)
{
head = head.next;
}
// To store modified list
Node res = head;
// Traverse linked list and keep
// adding nodes between 0s.
Node temp = head;
int prod = 1;
while (temp != null )
{
// loop to product the data of nodes till
// it encounters 0
if (temp.data != 0)
{
prod *= temp.data;
temp = temp.next;
}
// If we encounters 0, we need
// to update next pointers
else
{
res.data = prod;
res.next = temp.next;
temp = temp.next;
res = res.next;
prod = 1;
}
}
// For the last segment
res.data = prod;
res.next = temp;
printList(head);
}
// Function to traverse and print Linked List
static void printList(Node head)
{
while (head.next != null )
{
Console.Write(head.data + "-> " );
head = head.next;
}
Console.WriteLine(head.data);
}
// Driver Code
public static void Main(String[] args)
{
Node head = new Node(3);
head.next = new Node(2);
head.next.next = new Node(0);
head.next.next.next = new Node(4);
head.next.next.next.next = new Node(5);
head.next.next.next.next.next = new Node(0);
head.next.next.next.next.next.next = new Node(6);
head.next.next.next.next.next.next.next = new Node(7);
inPlaceStore(head);
}
} // This code has been contributed by 29AjayKumar |
Javascript
<script> // javascript program to in-place product linked list // nodes between 0s // Linked List Node class Node {
constructor(data) {
this .data = data;
this .next = null ;
}
}
// Function to in-place product linked list
// nodes between 0s
// Function to store numbers till 0
function inPlaceStore(head) {
if (head.data == 0) {
head = head.next;
}
// To store modified list
var res = head;
// Traverse linked list and keep
// adding nodes between 0s.
var temp = head;
var prod = 1;
while (temp != null ) {
// loop to product the data of nodes till
// it encounters 0
if (temp.data != 0) {
prod *= temp.data;
temp = temp.next;
}
// If we encounters 0, we need
// to update next pointers
else {
res.data = prod;
res.next = temp.next;
temp = temp.next;
res = res.next;
prod = 1;
}
}
// For the last segment
res.data = prod;
res.next = temp;
printList(head);
}
// Function to traverse and print Linked List
function printList(head) {
while (head.next != null ) {
document.write(head.data + "-> " );
head = head.next;
}
document.write(head.data);
}
// Driver Code
var head = new Node(3);
head.next = new Node(2);
head.next.next = new Node(0);
head.next.next.next = new Node(4);
head.next.next.next.next = new Node(5);
head.next.next.next.next.next = new Node(0);
head.next.next.next.next.next.next = new Node(6);
head.next.next.next.next.next.next.next = new Node(7);
inPlaceStore(head);
// This code contributed by Rajput-Ji </script> |
Output
6-> 20-> 42