# Linked List Sum of Nodes Between 0s

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

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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

## 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.

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.