Skip to content
Related Articles

Related Articles

Improve Article
Linked List Sum of Nodes Between 0s
  • Difficulty Level : Easy
  • Last Updated : 30 Dec, 2020

Given a linked list which contains a series of numbers separated by “0”. Add them and store them in the linked list in-place.

Note :There will not be continuous zeros in input.

Examples: 

Input  : 1->2->3->0->5->4->0->3->2->0
Output : 6->9->5

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

1. Start iterating over nodes of the linked list.
2. Iterate while temp.data !=0, and add these data into a variable ‘sum’.
3. When you encounter 0 as the node’s data, change pointers of previous nodes.

C++




// C++ program to in-place add linked list
// nodes between 0s.
#include <bits/stdc++.h>
using namespace std;
#define NODE struct node
 
// Structure of a node
NODE
{
    int data;
    struct node *next;
};
 
// Function to create a node
NODE *getNode(int val)
{
    NODE *temp;
    temp = (NODE*)malloc(sizeof(NODE));
    temp->data = val;
    temp->next = NULL;
    return temp;
}
 
// Function to traverse and print Linked List
void printList(NODE *head)
{
    while(head->next)
    {
        cout << head->data << "-> ";
        head = head->next;
    }
    cout << "->" << head->data ;
}
 
void inPlaceStore(NODE *head)
{
     
    // Function to store numbers till 0
    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 sum = 0;
     
    while(temp)
    {
         
        // loop to sum the data of nodes till
        // it encounters 0
        if(temp->data != 0)
        {
            sum += temp->data;
            temp = temp->next;
        }
         
        // If we encounters 0, we need
        // to update next pointers
        else
        {
            res->data = sum;
            res->next = temp->next;
            temp = temp->next;
            res = temp;
            sum = 0;
        }
    }
    printList(head);
}
 
// Driver Code
int main()
{
     
    NODE *head;
    head = getNode(3);
    head->next = getNode(2);
    head->next->next = getNode(0);
    head->next->next->next = getNode(4);
    head->next->next->next->next = getNode(5);
    head->next->next->next->next->next = getNode(0);
    head->next->next->next->next->next->next = getNode(6);
    head->next->next->next->next->next->next->next = getNode(7);
    inPlaceStore(head);
    return 0;
}
 
// This code is contributed by shivanisinghss2110

C




// C program to in-place add linked list
// nodes between 0s.
#include <stdio.h>
#include<stdlib.h>
#define NODE struct node
 
// Structure of a node
NODE
{
    int data;
    struct node *next;
};
 
// Function to create a node
NODE *getNode(int val)
{
    NODE *temp;
    temp = (NODE*)malloc(sizeof(NODE));
    temp->data = val;
    temp->next = NULL;
    return temp;
}
 
// Function to traverse and print Linked List
void printList(NODE *head)
{
    while(head->next)
    {
        printf("%d->",head->data);
        head = head->next;
    }
    printf("%d\n",head->data);
}
 
void inPlaceStore(NODE *head)
{
     
    // Function to store numbers till 0
    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 sum = 0;
     
    while(temp)
    {
         
        // loop to sum the data of nodes till
        // it encounters 0
        if(temp->data != 0)
        {
            sum+=temp->data;
            temp = temp->next;
        }
         
         
        // If we encounters 0, we need
        // to update next pointers
        else
        {
             
            res->data = sum;
            res->next = temp->next;
            temp = temp->next;
            res = temp;
            sum = 0;
        }
    }
    printList(head);
}
 
// Driver Code
int main()
{
     
    NODE *head;
    head = getNode(3);
    head->next = getNode(2);
    head->next->next = getNode(0);
    head->next->next->next = getNode(4);
    head->next->next->next->next = getNode(5);
    head->next->next->next->next->next = getNode(0);
    head->next->next->next->next->next->next = getNode(6);
    head->next->next->next->next->next->next->next = getNode(7);
    inPlaceStore(head);
    return 0;
}
 
// This code is contributed by
// Kaustav kumar Chanda

Java




// Java program to in-place add linked list
// nodes between 0s.
class Node {
    int data;
    Node next;
 
    public Node(int data)
    {
        this.data = data;
        this.next = null;
    }
}
 
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 sum = 0;
        while (temp != null) {
             
             
             
            // loop to sum the data of nodes till
            // it encounters 0
            if (temp.data != 0) {
                sum += temp.data;
                temp = temp.next;
            }
 
            // If we encounters 0, we need
            // to update next pointers
            else {
                res.data = sum;
                res.next = temp.next;
                temp = res.next;
                res = res.next;
                sum = 0;
            }
        }
        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 add linked list
# nodes between 0s.
  
# Structure of a node
class Node:
     
    def __init__(self, data):
         
        self.data = data
        self.next = None
 
# Function to create a node
def getNode(val):
     
    temp = Node(val)
    return temp
     
# Function to traverse and print Linked List
def printList(head):
 
    while (head.next):
        print(head.data, end = "-> ")
        head = head.next
     
    print("->" + str(head.data), end = '')
 
def inPlaceStore(head):
      
    # Function to store numbers till 0
    if (head.data == 0):
        head = head.next
     
    # To store modified list
    res = head
      
    # Traverse linked list and keep
    # adding nodes between 0s.
    temp = head
    sum = 0
      
    while (temp):
          
        # Loop to sum the data of nodes till
        # it encounters 0
        if (temp.data != 0):
            sum += temp.data
            temp = temp.next
         
        # If we encounters 0, we need
        # to update next pointers
        else:
            res.data = sum
            res.next = temp.next
            temp = temp.next
            res = temp
            sum = 0
         
    printList(head)
 
# Driver Code
if __name__=='__main__':
      
    head = getNode(3)
    head.next = getNode(2)
    head.next.next = getNode(0)
    head.next.next.next = getNode(4)
    head.next.next.next.next = getNode(5)
    head.next.next.next.next.next = getNode(0)
    head.next.next.next.next.next.next = getNode(6)
    head.next.next.next.next.next.next.next = getNode(7)
     
    inPlaceStore(head)
     
# This code is contributed by rutvik_56

C#




// C# program to in-place add linked list
// nodes between 0s.
using System;
 
public class Node
{
    public int data;
    public Node next;
 
    public Node(int data)
    {
        this.data = data;
        this.next = null;
    }
}
 
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 sum = 0;
        while (temp != null)
        {
             
            // loop to sum the data of nodes till
            // it encounters 0
            if (temp.data != 0)
            {
                sum += temp.data;
                temp = temp.next;
            }
 
            // If we encounters 0, we need
            // to update next pointers
            else
            {
                res.data = sum;
                res.next = temp.next;
                temp = res.next;
                res = res.next;
                sum = 0;
            }
        }
        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()
    {
        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 is contributed PrinciRaj1992 */
Output



5-> 9-> 6-> ->7

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer DSA Live Classes 




My Personal Notes arrow_drop_up
Recommended Articles
Page :