Linked List Sum of Nodes Between 0s

Given a linked list which contains series of numbers seperated by “0”. Add them and store 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 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

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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);
          
    }
}

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 */

chevron_right



Output:

5-> 9-> 6-> 7


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 :


1


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