Check if elements of Linked List are present in pair

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

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:

• Initialise 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 ` ` `  `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 `

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 `

Output:

```Yes
```

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.