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

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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


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.




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.