Skip to content
Related Articles

Related Articles

Improve Article

Check if elements of Linked List are present in pair

  • Difficulty Level : Easy
  • Last Updated : 29 Jun, 2021

Given a singly linked list of integers. The task is to check if each element in the linked list is present in a pair i.e. all elements occur even no. of times.
Examples: 
 

Input: 1 -> 2 -> 3 -> 3 -> 1 -> 2
Output: Yes

Input: 10 -> 20 -> 30 -> 20
Output: No

 

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

Approach: 
 

  • Initialize a temp node pointing to head.
  • Take a variable to calculate XOR of all elements.
  • Start traversing linked list and keep calculating the XOR with node->data.
  • Return true if XOR is 0, else return false.

Below is the implementation of above approach: 
 

C++




// C++ program to check if elements of
// linked lists are present in pair
#include <bits/stdc++.h>
 
using namespace std;
 
// A linked list node
struct Node {
    int data;
    struct Node* next;
};
 
// Function to check if elements of
// linked list are present in pair
bool isPair(struct Node* head)
{
 
    int xxor = 0;
 
    struct Node* temp = head;
 
    while (temp != NULL) {
        xxor ^= temp->data;
        temp = temp->next;
    }
 
    return xxor;
}
 
// Function to add a node at the
// beginning of Linked 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;
}
 
// Driver program to test above function
int main()
{
    struct Node* first = NULL;
 
    /* First constructed linked list is:
    10 -> 34 -> 1 -> 10 -> 34 -> 1 */
    push(&first, 1);
    push(&first, 34);
    push(&first, 10);
    push(&first, 1);
    push(&first, 34);
    push(&first, 10);
 
    // Calling function to check pair elements
    if (!isPair(first)) {
        cout << "Yes" << endl;
    }
    else {
        cout << "No" << endl;
    }
 
    return 0;
}

Java




// Java program to check if elements of
// linked lists are present in pair
 
// Node Class
class Node
{
    int data;
    Node next;
 
    // Constructor to create a new node
    Node(int d)
    {
        data = d;
        next = null;
    }
}
 
class SLL
{
 
    // function to insert a node at the beginning
    // of the Singly Linked List
    static Node push(Node head, int data)
    {
        Node newNode = new Node(data);
        newNode.next = head;
        head = newNode;
        return head;
    }
 
    // Function to check if elements of
    // linked list are present in pair
    static boolean isPair(Node head)
    {
        int xxor = 0;
        Node temp = head;
        while (temp != null)
        {
            xxor ^= temp.data;
            temp = temp.next;
        }
        return xxor != 0;
    }
 
    // Driver code
    public static void main(String[] args)
    {
        Node head = null;
 
        // First constructed linked list
        // 10 -> 34 -> 1 -> 10 -> 34 -> 1
 
        head = push(head, 1);
        head = push(head, 34);
        head = push(head, 10);
        head = push(head, 1);
        head = push(head, 34);
        head = push(head, 10);
 
        // Calling function to check pair elements
        if (!isPair(head))
        {
            System.out.println("Yes");
        }
        else
        {
            System.out.println("No");
        }
    }
}
 
// This code is contributed by Vivekkumar Singh

Python3




# Python3 program to check if elements of
# linked lists are present in pair
 
# A linked list node
class Node:
    def __init__(self):
        self.data = 0
        self.next = None
 
# Function to check if elements of
# linked list are present in pair
def isPair( head):
    xxor = 0
    temp = head
 
    while (temp != None) :
        xxor = xxor ^ temp.data
        temp = temp.next
 
    return xxor
 
# Function to add a node at the
# beginning of Linked List
def push( head_ref, new_data):
 
    # allocate node
    new_node = 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
     
    return head_ref
 
# Driver code
 
first = None
 
# First constructed linked list is:
# 10 . 34 . 1 . 10 . 34 . 1
first = push(first, 1)
first = push(first, 34)
first = push(first, 10)
first = push(first, 1)
first = push(first, 34)
first = push(first, 10)
 
# Calling function to check pair elements
if (not isPair(first)):
    print( "Yes" )
     
else :
    print( "No" )
     
# This code is contributed by Arnab Kundu

C#




// C# program to check if elements of
// linked lists are present in pair
using System;
 
// Node Class
public class Node
{
    public int data;
    public Node next;
 
    // Constructor to create a new node
    public Node(int d)
    {
        data = d;
        next = null;
    }
}
 
public class SLL
{
 
    // function to insert a node at the beginning
    // of the Singly Linked List
    static Node push(Node head, int data)
    {
        Node newNode = new Node(data);
        newNode.next = head;
        head = newNode;
        return head;
    }
 
    // Function to check if elements of
    // linked list are present in pair
    static Boolean isPair(Node head)
    {
        int xxor = 0;
        Node temp = head;
        while (temp != null)
        {
            xxor ^= temp.data;
            temp = temp.next;
        }
        return xxor != 0;
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        Node head = null;
 
        // First constructed linked list
        // 10 -> 34 -> 1 -> 10 -> 34 -> 1
 
        head = push(head, 1);
        head = push(head, 34);
        head = push(head, 10);
        head = push(head, 1);
        head = push(head, 34);
        head = push(head, 10);
 
        // Calling function to check pair elements
        if (!isPair(head))
        {
            Console.WriteLine("Yes");
        }
        else
        {
            Console.WriteLine("No");
        }
    }
}
 
// This code is contributed by Rajput-Ji

Javascript




<script>
 
      // JavaScript program to check if elements of
      // linked lists are present in pair
      // Node Class
      class Node {
        // Constructor to create a new node
        constructor(d) {
          this.data = d;
          this.next = null;
        }
      }
 
      // function to insert a node at the beginning
      // of the Singly Linked List
      function push(head, data) {
        var newNode = new Node(data);
        newNode.next = head;
        head = newNode;
        return head;
      }
 
      // Function to check if elements of
      // linked list are present in pair
      function isPair(head) {
        var xxor = 0;
        var temp = head;
        while (temp != null) {
          xxor ^= temp.data;
          temp = temp.next;
        }
        return xxor != 0;
      }
 
      // Driver code
      var head = null;
 
      // First constructed linked list
      // 10 -> 34 -> 1 -> 10 -> 34 -> 1
 
      head = push(head, 1);
      head = push(head, 34);
      head = push(head, 10);
      head = push(head, 1);
      head = push(head, 34);
      head = push(head, 10);
 
      // Calling function to check pair elements
      if (!isPair(head)) {
        document.write("Yes");
      } else {
        document.write("No");
      }
       
</script>
Output: 
Yes

 




My Personal Notes arrow_drop_up
Recommended Articles
Page :