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 <stdio.h> ` `#include <stdlib.h> ` ` ` `// 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; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

0.2

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.

## Recommended Posts:

- Convert singly linked list into circular linked list
- Difference between Singly linked list and Doubly linked list
- Convert Singly Linked List to XOR Linked List
- QuickSort on Singly Linked List
- Sum of the nodes of a Singly Linked List
- Implement a stack using singly linked list
- Convert a Singly Linked List to an array
- Insertion Sort for Singly Linked List
- Product of the nodes of a Singly Linked List
- Circular Singly Linked List | Insertion
- Alternate Odd and Even Nodes in a Singly Linked List
- Alternating split of a given Singly Linked List | Set 1
- Binary Search on Singly Linked List
- Find the common nodes in two singly linked list
- Find middle of singly linked list Recursively
- Reverse alternate K nodes in a Singly Linked List
- Difference between a Static Queue and a Singly Linked List
- Function to check if a singly linked list is palindrome
- Program to delete all even nodes from a Singly Linked List
- Delete all Non-Prime Nodes from a Singly Linked List

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.