GeeksforGeeks App
Open App
Browser
Continue

# Find sum of even and odd nodes in a linked list

Given a linked list, the task is to find the sum of even and odd nodes in it separately.

Examples:

Input: 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7
Output:
Even Sum = 12
Odd Sum = 16

Input: 5 -> 7 -> 8 -> 10 -> 15
Output:
Even Sum = 18
Odd Sum = 27

Approach: Traverse the whole linked list and for each node:-

1. If the element is even then we add that element to the variable which is holding the sum of even elements.
2. If the element is odd then we add that element to the variable which is holding the sum of odd elements.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;` `// Represents node of the linked list``struct` `Node {``    ``int` `data;``    ``Node* next;``};` `// Function to insert a node at the``// end of the linked list``void` `insert(Node** root, ``int` `item)``{``    ``Node *ptr = *root, *temp = ``new` `Node;``    ``temp->data = item;``    ``temp->next = NULL;` `    ``if` `(*root == NULL)``        ``*root = temp;``    ``else` `{``        ``while` `(ptr->next != NULL)``            ``ptr = ptr->next;``        ``ptr->next = temp;``    ``}``}` `// Function to print the sum of even``// and odd nodes of the linked lists``void` `evenOdd(Node* root)``{``    ``int` `odd = 0, even = 0;``    ``Node* ptr = root;``    ``while` `(ptr != NULL) {` `        ``// If current node's data is even``        ``if` `(ptr->data % 2 == 0)``            ``even += ptr->data;` `        ``// If current node's data is odd``        ``else``            ``odd += ptr->data;` `        ``// ptr now points to the next node``        ``ptr = ptr->next;``    ``}` `    ``cout << ``"Even Sum = "` `<< even << endl;``    ``cout << ``"Odd Sum = "` `<< odd << endl;``}` `// Driver code``int` `main()``{``    ``Node* root = NULL;``    ``insert(&root, 1);``    ``insert(&root, 2);``    ``insert(&root, 3);``    ``insert(&root, 4);``    ``insert(&root, 5);``    ``insert(&root, 6);``    ``insert(&root, 7);` `    ``evenOdd(root);` `    ``return` `0;``}`

## Java

 `// Java implementation of the approach``class` `GfG``{` `// Represents node of the linked list``static` `class` `Node``{``    ``int` `data;``    ``Node next;``}``static` `Node root;` `// Function to insert a node at the``// end of the linked list``static` `void` `insert(``int` `item)``{``    ``Node ptr = root, temp = ``new` `Node();``    ``temp.data = item;``    ``temp.next = ``null``;` `    ``if` `(root == ``null``)``        ``root = temp;``    ``else``    ``{``        ``while` `(ptr.next != ``null``)``            ``ptr = ptr.next;``        ``ptr.next = temp;``    ``}``}` `// Function to print the sum of even``// and odd nodes of the linked lists``static` `void` `evenOdd(Node root)``{``    ``int` `odd = ``0``, even = ``0``;``    ``Node ptr = root;``    ``while` `(ptr != ``null``)``    ``{` `        ``// If current node's data is even``        ``if` `(ptr.data % ``2` `== ``0``)``            ``even += ptr.data;` `        ``// If current node's data is odd``        ``else``            ``odd += ptr.data;` `        ``// ptr now points to the next node``        ``ptr = ptr.next;``    ``}` `    ``System.out.println(``"Even Sum = "` `+ even);``    ``System.out.println(``"Odd Sum = "` `+ odd);``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``// Node* root = NULL;``    ``insert( ``1``);``    ``insert( ``2``);``    ``insert( ``3``);``    ``insert( ``4``);``    ``insert(``5``);``    ``insert(``6``);``    ``insert( ``7``);` `    ``evenOdd(root);``}``}` `// This code is contributed by Prerna Saini`

## Python3

 `# Python3 implementation of the approach``import` `math` `# Represents node of the linked list``class` `Node:``    ``def` `__init__(``self``, data):``        ``self``.data ``=` `data``        ``self``.``next` `=` `None` `# Function to insert a node at the``# end of the linked list``def` `insert(root, item):``    ``ptr ``=` `root``    ``temp ``=` `Node(item)``    ``temp.data ``=` `item``    ``temp.``next` `=` `None` `    ``if` `(root ``=``=` `None``):``        ``root ``=` `temp``    ``else``:``        ``while` `(ptr.``next` `!``=` `None``):``            ``ptr ``=` `ptr.``next``        ``ptr.``next` `=` `temp``    ` `    ``return` `root` `# Function to print the sum of even``# and odd nodes of the linked lists``def` `evenOdd(root):``    ``odd ``=` `0``    ``even ``=` `0``    ``ptr ``=` `root``    ``while` `(ptr !``=` `None``):` `        ``# If current node's data is even``        ``if` `(ptr.data ``%` `2` `=``=` `0``):``            ``even ``=` `even ``+` `ptr.data` `        ``# If current node's data is odd``        ``else``:``            ``odd ``=` `odd ``+` `ptr.data` `        ``# ptr now points to the next node``        ``ptr ``=` `ptr.``next``    ` `    ``print``( ``"Even Sum = "``, even)``    ``print``( ``"Odd Sum = "``, odd)` `# Driver code``if` `__name__``=``=``'__main__'``:``    ``root ``=` `None``    ``root ``=` `insert(root, ``1``)``    ``root ``=` `insert(root, ``2``)``    ``root ``=` `insert(root, ``3``)``    ``root ``=` `insert(root, ``4``)``    ``root ``=` `insert(root, ``5``)``    ``root ``=` `insert(root, ``6``)``    ``root ``=` `insert(root, ``7``)` `    ``evenOdd(root)` `# This code is contributed by AbhiThakur`

## C#

 `// C# implementation of the approach``using` `System;` `class` `GfG``{` `// Represents node of the linked list``public` `class` `Node``{``    ``public` `int` `data;``    ``public` `Node next;``}``static` `Node root;` `// Function to insert a node at the``// end of the linked list``static` `void` `insert(``int` `item)``{``    ``Node ptr = root, temp = ``new` `Node();``    ``temp.data = item;``    ``temp.next = ``null``;` `    ``if` `(root == ``null``)``        ``root = temp;``    ``else``    ``{``        ``while` `(ptr.next != ``null``)``            ``ptr = ptr.next;``        ``ptr.next = temp;``    ``}``}` `// Function to print the sum of even``// and odd nodes of the linked lists``static` `void` `evenOdd(Node root)``{``    ``int` `odd = 0, even = 0;``    ``Node ptr = root;``    ``while` `(ptr != ``null``)``    ``{` `        ``// If current node's data is even``        ``if` `(ptr.data % 2 == 0)``            ``even += ptr.data;` `        ``// If current node's data is odd``        ``else``            ``odd += ptr.data;` `        ``// ptr now points to the next node``        ``ptr = ptr.next;``    ``}` `    ``Console.WriteLine(``"Even Sum = "` `+ even);``    ``Console.WriteLine(``"Odd Sum = "` `+ odd);``}` `// Driver code``public` `static` `void` `Main(String []args)``{``    ``// Node* root = NULL;``    ``insert( 1);``    ``insert( 2);``    ``insert( 3);``    ``insert( 4);``    ``insert(5);``    ``insert(6);``    ``insert( 7);` `    ``evenOdd(root);``}``}` `// This code is contributed by Arnab Kundu`

## Javascript

 ``

Output:

```Even Sum = 12
Odd Sum = 16```

Time complexity: O(N) where N is number of nodes in the given linked list.
Auxiliary space: O(1), as constant space is used.

My Personal Notes arrow_drop_up