# Sum and Product of the nodes of a Circular Singly Linked List which are divisible by K

Given a singly circular linked list. The task is to find the sum and product of nodes which are divisible by K of the given linked list.

Examples:

```Input : List = 5->6->7->8->9->10->11->11
K = 11
Output : Sum = 22, Product = 121

Input : List = 15->7->3->9->11->5
K = 5
Output : Product = 75, Sum = 20
```

Sum And Product of Singly Circular Linked List Node

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

Approach:

1. Initialize a pointer current with the head of the circular linked list and a sum variable sum with 0 and a product variable product with 1.
2. Start traversing the linked list using a do while loop until all the nodes get traversed.
3. If current node data is divisible by given key.
• Add the value of current node to the sum i.e. sum = sum + current -> data.
• Multiply the value of current node to the product i.e. product = product * current -> data.
• Increment the pointer to the next node of linked list i.e. temp = temp -> next.
4. Print the sum and product.

Below is the implementation of the above approach:

## C++

 `// C++ program to calculate sum and product from ` `// singly circular linked list nodes ` `// which are divisible by given key ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// Circular list node ` `struct` `Node { ` `    ``int` `data; ` `    ``struct` `Node* next; ` `}; ` ` `  `// Function to calculate sum and product ` `void` `sumProduct(``struct` `Node* head, ``int` `key) ` `{ ` `    ``struct` `Node* current = head; ` ` `  `    ``int` `sum = 0, product = 1; ` ` `  `    ``// if list is empty simply show message ` `    ``if` `(head == NULL) { ` `        ``printf``(``"\nDisplay List is empty\n"``); ` `        ``return``; ` `    ``} ` `    ``// traverse first to last node ` `    ``else` `{ ` `        ``do` `{ ` `            ``// check if current node's data is ` `            ``// divisible by key ` `            ``if` `((current->data) % key == 0) { ` ` `  `                ``// Calculate sum ` `                ``sum += current->data; ` ` `  `                ``// Calculate product ` `                ``product *= current->data; ` `            ``} ` ` `  `            ``current = current->next; ` `        ``} ``while` `(current != head); ` `    ``} ` ` `  `    ``cout << ``"Sum = "` `<< sum << ``", Product = "` `<< product; ` `} ` ` `  `// Function print the list ` `void` `displayList(``struct` `Node* head) ` `{ ` `    ``struct` `Node* current = head; ` ` `  `    ``// if list is empty simply show message ` `    ``if` `(head == NULL) { ` `        ``printf``(``"\nDisplay List is empty\n"``); ` `        ``return``; ` `    ``} ` `    ``// traverse first to last node ` `    ``else` `{ ` `        ``do` `{ ` `            ``printf``(``"%d "``, current->data); ` `            ``current = current->next; ` `        ``} ``while` `(current != head); ` `    ``} ` `} ` ` `  `// Function to insert a node at the end of ` `// a Circular linked list ` `void` `InsertNode(``struct` `Node** head, ``int` `data) ` `{ ` `    ``struct` `Node* current = *head; ` `    ``// Create a new node ` `    ``struct` `Node* newNode = ``new` `Node; ` ` `  `    ``// check node is created or not ` `    ``if` `(!newNode) { ` `        ``printf``(``"\nMemory Error\n"``); ` `        ``return``; ` `    ``} ` ` `  `    ``// insert data into newly created node ` `    ``newNode->data = data; ` ` `  `    ``// check list is empty ` `    ``// if not have any node then ` `    ``// make first node it ` `    ``if` `(*head == NULL) { ` `        ``newNode->next = newNode; ` `        ``*head = newNode; ` `        ``return``; ` `    ``} ` `    ``// if list have already some node ` `    ``else` `{ ` ` `  `        ``// move firt node to last node ` `        ``while` `(current->next != *head) { ` `            ``current = current->next; ` `        ``} ` ` `  `        ``// put first or head node address in new node link ` `        ``newNode->next = *head; ` ` `  `        ``// put new node address into last node link(next) ` `        ``current->next = newNode; ` `    ``} ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``struct` `Node* head = NULL; ` `    ``InsertNode(&head, 5); ` `    ``InsertNode(&head, 6); ` `    ``InsertNode(&head, 7); ` `    ``InsertNode(&head, 8); ` `    ``InsertNode(&head, 9); ` `    ``InsertNode(&head, 10); ` `    ``InsertNode(&head, 11); ` `    ``InsertNode(&head, 11); ` ` `  `    ``cout << ``"Initial List: "``; ` `    ``displayList(head); ` ` `  `    ``cout << endl; ` `    ``sumProduct(head, 11); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java program to calculate sum and product from  ` `// singly circular linked list nodes  ` `// which are divisible by given key  ` `import` `java.util.*; ` `class` `Solution ` `{ ` `   `  `// Circular list node  ` `static` `class` `Node {  ` `    ``int` `data;  ` `    ``Node next;  ` `}  ` `   `  `// Function to calculate sum and product  ` `static` `void` `sumProduct( Node head, ``int` `key)  ` `{  ` `         ``Node current = head;  ` `   `  `    ``int` `sum = ``0``, product = ``1``;  ` `   `  `    ``// if list is empty simply show message  ` `    ``if` `(head == ``null``) {  ` `        ``System.out.print(``"\nDisplay List is empty\n"``);  ` `        ``return``;  ` `    ``}  ` `    ``// traverse first to last node  ` `    ``else` `{  ` `        ``do` `{  ` `            ``// check if current node's data is  ` `            ``// divisible by key  ` `            ``if` `((current.data) % key == ``0``) {  ` `   `  `                ``// Calculate sum  ` `                ``sum += current.data;  ` `   `  `                ``// Calculate product  ` `                ``product = current.data;  ` `            ``}  ` `   `  `            ``current = current.next;  ` `        ``} ``while` `(current != head);  ` `    ``}  ` `   `  `    ``System.out.print( ``"Sum = "` `+ sum + ``", Product = "` `+ product);  ` `}  ` `   `  `// Function print the list  ` `static` `void` `displayList( Node head)  ` `{  ` `     ``Node current = head;  ` `   `  `    ``// if list is empty simply show message  ` `    ``if` `(head == ``null``) {  ` `        ``System.out.print(``"\nDisplay List is empty\n"``);  ` `        ``return``;  ` `    ``}  ` `    ``// traverse first to last node  ` `    ``else` `{  ` `        ``do` `{  ` `            ``System.out.print( current.data+``" "``);  ` `            ``current = current.next;  ` `        ``} ``while` `(current != head);  ` `    ``}  ` `}  ` `   `  `// Function to insert a node at the end of  ` `// a Circular linked list  ` `static` `Node InsertNode( Node head, ``int` `data)  ` `{  ` `     ``Node current = head;  ` `    ``// Create a new node  ` `     ``Node newNode = ``new` `Node();  ` `   `  `    ``// check node is created or not  ` `    ``if` `(newNode==``null``) {  ` `       ``System.out.print(``"\nMemory Error\n"``);  ` `        ``return` `head;  ` `    ``}  ` `   `  `    ``// insert data into newly created node  ` `    ``newNode.data = data;  ` `   `  `    ``// check list is empty  ` `    ``// if not have any node then  ` `    ``// make first node it  ` `    ``if` `(head == ``null``) {  ` `        ``newNode.next = newNode;  ` `        ``head = newNode;  ` `        ``return` `head;  ` `    ``}  ` `    ``// if list have already some node  ` `    ``else` `{  ` `   `  `        ``// move firt node to last node  ` `        ``while` `(current.next != head) {  ` `            ``current = current.next;  ` `        ``}  ` `   `  `        ``// put first or head node address in new node link  ` `        ``newNode.next = head;  ` `   `  `        ``// put new node address into last node link(next)  ` `        ``current.next = newNode;  ` `    ``}  ` `    ``return` `head; ` `}  ` `   `  `// Driver Code  ` `public` `static` `void` `main(String args[]) ` `{  ` `     ``Node head=``null` `;  ` `    ``head =InsertNode(head, ``5``);  ` `    ``head =InsertNode(head, ``6``);  ` `    ``head =InsertNode(head, ``7``);  ` `    ``head =InsertNode(head, ``8``);  ` `    ``head =InsertNode(head, ``9``);  ` `    ``head =InsertNode(head, ``10``);  ` `    ``head =InsertNode(head, ``11``);  ` `    ``head =InsertNode(head, ``11``);  ` `   `  `    ``System.out.print( ``"Initial List: "``);  ` `    ``displayList(head);  ` `   `  `    ``System.out.println();  ` `    ``sumProduct(head, ``11``);  ` `    `  `} ` `} ` `//contributed by Arnab Kundu `

## C#

 `// C# program to calculate sum and product from  ` `// singly circular linked list nodes  ` `// which are divisible by given key  ` `using` `System; ` `     `  `class` `GFG ` `{ ` ` `  `    ``// Circular list node  ` `    ``class` `Node  ` `    ``{  ` `        ``public` `int` `data;  ` `        ``public` `Node next;  ` `    ``}  ` ` `  `    ``// Function to calculate sum and product  ` `    ``static` `void` `sumProduct( Node head, ``int` `key)  ` `    ``{  ` `            ``Node current = head;  ` ` `  `        ``int` `sum = 0, product = 1;  ` ` `  `        ``// if list is empty simply show message  ` `        ``if` `(head == ``null``)  ` `        ``{  ` `            ``Console.Write(``"\nDisplay List is empty\n"``);  ` `            ``return``;  ` `        ``}  ` `         `  `        ``// traverse first to last node  ` `        ``else` `        ``{  ` `            ``do` `            ``{  ` `                ``// check if current node's data is  ` `                ``// divisible by key  ` `                ``if` `((current.data) % key == 0)  ` `                ``{  ` ` `  `                    ``// Calculate sum  ` `                    ``sum += current.data;  ` ` `  `                    ``// Calculate product  ` `                    ``product = current.data;  ` `                ``}  ` ` `  `                ``current = current.next;  ` `            ``} ``while` `(current != head);  ` `        ``}  ` ` `  `        ``Console.Write( ``"Sum = "` `+ sum + ``", Product = "` `+ product);  ` `    ``}  ` ` `  `    ``// Function print the list  ` `    ``static` `void` `displayList( Node head)  ` `    ``{  ` `        ``Node current = head;  ` ` `  `        ``// if list is empty simply show message  ` `        ``if` `(head == ``null``)  ` `        ``{  ` `            ``Console.Write(``"\nDisplay List is empty\n"``);  ` `            ``return``;  ` `        ``}  ` `        ``// traverse first to last node  ` `        ``else`  `        ``{  ` `            ``do`  `            ``{  ` `                ``Console.Write( current.data+``" "``);  ` `                ``current = current.next;  ` `            ``} ``while` `(current != head);  ` `        ``}  ` `    ``}  ` ` `  `    ``// Function to insert a node at the end of  ` `    ``// a Circular linked list  ` `    ``static` `Node InsertNode( Node head, ``int` `data)  ` `    ``{  ` `        ``Node current = head;  ` `        ``// Create a new node  ` `        ``Node newNode = ``new` `Node();  ` ` `  `        ``// check node is created or not  ` `        ``if` `(newNode==``null``)  ` `        ``{  ` `            ``Console.Write(``"\nMemory Error\n"``);  ` `            ``return` `head;  ` `        ``}  ` ` `  `        ``// insert data into newly created node  ` `        ``newNode.data = data;  ` ` `  `        ``// check list is empty  ` `        ``// if not have any node then  ` `        ``// make first node it  ` `        ``if` `(head == ``null``) ` `        ``{  ` `            ``newNode.next = newNode;  ` `            ``head = newNode;  ` `            ``return` `head;  ` `        ``}  ` `        ``// if list have already some node  ` `        ``else` `        ``{  ` ` `  `            ``// move firt node to last node  ` `            ``while` `(current.next != head)  ` `            ``{  ` `                ``current = current.next;  ` `            ``}  ` ` `  `            ``// put first or head node address in new node link  ` `            ``newNode.next = head;  ` ` `  `            ``// put new node address into last node link(next)  ` `            ``current.next = newNode;  ` `        ``}  ` `        ``return` `head; ` `    ``}  ` ` `  `    ``// Driver Code  ` `    ``public` `static` `void` `Main() ` `    ``{  ` `        ``Node head=``null` `;  ` `        ``head =InsertNode(head, 5);  ` `        ``head =InsertNode(head, 6);  ` `        ``head =InsertNode(head, 7);  ` `        ``head =InsertNode(head, 8);  ` `        ``head =InsertNode(head, 9);  ` `        ``head =InsertNode(head, 10);  ` `        ``head =InsertNode(head, 11);  ` `        ``head =InsertNode(head, 11);  ` ` `  `        ``Console.Write( ``"Initial List: "``);  ` `        ``displayList(head);  ` ` `  `        ``Console.WriteLine();  ` `        ``sumProduct(head, 11);  ` `    ``} ` `} ` ` `  `// This code has been contributed  ` `// by PrinciRaj1992  `

Output:

```Initial List: 5 6 7 8 9 10 11 11
Sum = 22, Product = 121
```

My Personal Notes arrow_drop_up