# Probability of finding an element K in a Singly Linked List

Given a Singly Linked List of size N and another key K, we have to find the probability that the key K is present in the Singly Linked List.

Examples:

Input: Linked list = 2 -> 3 -> 3 -> 3 -> 4 -> 2, Key = 5
Output: 0
Explanation:
Since the value of Key is 5 which is not present in List, the probability of finding the Key in the Linked List is 0.

Input: Linked list = 2 -> 3 -> 5 -> 1 -> 9 -> 8 -> 0 -> 7 -> 6 -> 5, Key = 5
Output: 0.2

Approach:
The probability of finding a Key element K in a Singly Linked List is given below:

Probability = Number of Occurrences of Element K / Size of the Linked List

In our approach, we will first count the number of Element K present in the Singly Linked List and then the probability will be calculated by dividing the number of occurrences of K with the size of the Singly Linked List.

Below is the implementation of the above approach:

## C

 `// C code to find the probability ` `// of finding an Element ` `// in a Singly Linked List ` ` `  `#include ` `#include ` ` `  `// Link list node ` `struct` `Node { ` `    ``int` `data; ` `    ``struct` `Node* next; ` `}; ` ` `  `/* Given a reference (pointer to pointer) ` `   ``to the head of a list and an int, ` `   ``push a new node on the front of the list. */` `void` `push(``struct` `Node** head_ref, ``int` `new_data) ` `{ ` `    ``// allocate node ` `    ``struct` `Node* new_node ` `        ``= (``struct` `Node*)``malloc``( ` `            ``sizeof``(``struct` `Node)); ` ` `  `    ``// put in the data ` `    ``new_node->data = new_data; ` ` `  `    ``// link the old list off the new node ` `    ``new_node->next = (*head_ref); ` ` `  `    ``// move the head to point to the new node ` `    ``(*head_ref) = new_node; ` `} ` ` `  `// Counts nnumber of nodes in linked list ` `int` `getCount(``struct` `Node* head) ` `{ ` ` `  `    ``// Initialize count ` `    ``int` `count = 0; ` ` `  `    ``// Initialize current ` `    ``struct` `Node* current = head; ` ` `  `    ``while` `(current != NULL) { ` `        ``count++; ` `        ``current = current->next; ` `    ``} ` `    ``return` `count; ` `} ` ` `  `float` `kPresentProbability( ` `    ``struct` `Node* head, ` `    ``int` `n, ``int` `k) ` `{ ` ` `  `    ``// Initialize count ` `    ``float` `count = 0; ` ` `  `    ``// Initialize current ` `    ``struct` `Node* current = head; ` ` `  `    ``while` `(current != NULL) { ` `        ``if` `(current->data == k) ` `            ``count++; ` `        ``current = current->next; ` `    ``} ` `    ``return` `count / n; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``// Start with the empty list ` `    ``struct` `Node* head = NULL; ` ` `  `    ``// Use push() to construct below list ` `    ``// 1->2->1->3->1 ` `    ``push(&head, 2); ` `    ``push(&head, 3); ` `    ``push(&head, 5); ` `    ``push(&head, 1); ` `    ``push(&head, 9); ` `    ``push(&head, 8); ` `    ``push(&head, 0); ` `    ``push(&head, 7); ` `    ``push(&head, 6); ` `    ``push(&head, 5); ` ` `  `    ``printf``(``"%.1f"``, ` `           ``kPresentProbability( ` `               ``head, getCount(head), 5)); ` ` `  `    ``return` `0; ` `} `

Output:

```0.2
```

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

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.