Related Articles
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 ``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 ``#include``#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