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.


Input: Linked list = 2 -> 3 -> 3 -> 3 -> 4 -> 2, Key = 5
Output: 0
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

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 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) {
        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)
        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);
               head, getCount(head), 5));
    return 0;




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 or mail your article to 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.