Related Articles
Find extra node in the second Linked list
• Last Updated : 11 Jun, 2020

Given two Linked list L1 and L2. The second list L2 contains all the nodes of L1 along with 1 extra node. The task is to find that extra node.
Examples:

Input: L1 = 17 -> 7 -> 6 -> 16
L2 = 17 -> 7 -> 6 -> 16 -> 15
Output: 15
Explanation:
Element 15 is not present in the L1 list

Input: L1 = 10 -> 15 -> 5
L2 = 10 -> 100 -> 15 -> 5
Output: 100

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

Naive approach:

• Run nested loops and find the nodes in L2 which is not present in L1.
• The time complexity of this approach will be O(N2) where N is the length of the linked list.

Efficient approach:

• If all the nodes of the L1 and L2 are XORed together then every node of A[] will give 0 with its occurrence in L2 and the extra element say X when XORed with 0 will give (X XOR 0) = X which is the result.

Below is the implementation of the above approach:

## C++

 `// C++ program to find the ``// extra node``#include `` ` `using` `namespace` `std;`` ` `// Node of the singly linked ``// list``struct` `Node {``    ``int` `data;``    ``Node* next;``};`` ` `// Function to insert a node at ``// the beginning of the singly``// Linked List``void` `push(Node** head_ref,``          ``int` `new_data)``{``    ``// allocate node``    ``Node* new_node = ``    ``(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;``}`` ` `int` `print(Node* head_ref,``          ``Node* head_ref1)``{``    ``int` `ans = 0;`` ` `    ``Node* ptr1 = head_ref;``    ``Node* ptr2 = head_ref1;``    ``// Traverse the linked list``    ``while` `(ptr1 != NULL) {``        ``ans ^= ptr1->data;``        ``ptr1 = ptr1->next;``    ``}``    ``while` `(ptr2 != NULL) {``        ``ans ^= ptr2->data;``        ``ptr2 = ptr2->next;``    ``}``    ``return` `ans;``}`` ` `// Driver program``int` `main()``{``    ``// start with the empty list``    ``Node* head1 = NULL;``    ``Node* head2 = NULL;``    ``// create the linked list``    ``// 15 -> 16 -> 7 -> 6 -> 17``    ``push(&head1, 17);``    ``push(&head1, 7);``    ``push(&head1, 6);``    ``push(&head1, 16);`` ` `    ``// second  LL``    ``push(&head2, 17);``    ``push(&head2, 7);``    ``push(&head2, 6);``    ``push(&head2, 16);``    ``push(&head1, 15);``    ``int` `k = print(head1, head2);``    ``cout << k;``    ``return` `0;``}`

## Java

 `// Java program to find the ``// extra node``class` `GFG {``    ``// Node of the singly``    ``// linked list``    ``static` `class` `Node {``        ``int` `data;``        ``Node next;``    ``};`` ` `    ``// Function to insert a node at ``    ``// the beginning of the singly``    ``// Linked List``    ``static` `Node push(Node head_ref,``                     ``int` `new_data)``    ``{``        ``// allocate node``        ``Node new_node = ``new` `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;``    ``}`` ` `    ``static` `void` `extra(Node head_ref1, ``                      ``Node head_ref2)``    ``{``        ``int` `ans = ``0``;`` ` `        ``Node ptr1 = head_ref1;``        ``Node ptr2 = head_ref2;`` ` `        ``// Traverse the linked list``        ``while` `(ptr1 != ``null``) {``            ``ans ^= ptr1.data;``            ``ptr1 = ptr1.next;``        ``}``        ``while` `(ptr2 != ``null``) {``            ``ans ^= ptr2.data;``            ``ptr2 = ptr2.next;``        ``}`` ` `        ``System.out.println(ans);``    ``}`` ` `    ``// Driver code``    ``public` `static` `void` `main(String args[])``    ``{``        ``// start with the empty list``        ``Node head1 = ``null``;``        ``Node head2 = ``null``;``        ``// create the linked list``        ``// 15 . 16 . 7 . 6 . 17``        ``head1 = push(head1, ``17``);``        ``head1 = push(head1, ``7``);``        ``head1 = push(head1, ``6``);``        ``head1 = push(head1, ``16``);``        ``head1 = push(head1, ``15``);``         ` `        ``// second LL``        ``head2 = push(head2, ``17``);``        ``head2 = push(head2, ``7``);``        ``head2 = push(head2, ``6``);``        ``head2 = push(head2, ``16``);`` ` `        ``extra(head1, head2);``    ``}``}`

## Python3

 `# Python3 program to find the ``# extra node``class` `Node:  ``       ` `    ``def` `__init__(``self``, data):  ``        ``self``.data ``=` `data  ``        ``self``.``next` `=` `next``           ` `# Function to insert a node at   ``# the beginning of the singly ``# Linked List  ``def` `push( head_ref, new_data) : ``   ` `    ``# allocate node  ``    ``new_node ``=` `Node(``0``)  ``   ` `    ``# 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 ``   ` ` ` `def` `extra(head_ref1, head_ref2) : ``   ` `    ``ans ``=` `0``   ` `    ``ptr1 ``=` `head_ref1  ``    ``ptr2 ``=` `head_ref2``    ``# Traverse the linked list  ``    ``while` `(ptr1 !``=` `None``):``        ``# if current node is prime,  ``        ``# Find sum and product  ``        ``ans ^``=` `ptr1.data``        ``ptr1 ``=` `ptr1.``next``    ``while``(ptr2 !``=` `None``):``        ``ans^``=` `ptr2.data``        ``ptr2 ``=` `ptr2.``next``    ``print``(ans)  ``   ``## print( "Product = ", prod)  ``   ` `# Driver code  ``   ` `# start with the empty list  ``head1 ``=` `None``head2 ``=` `None` `# create the linked list  ``# 15 . 16 . 7 . 6 . 17  ``head1 ``=` `push(head1, ``17``)  ``head1 ``=` `push(head1, ``7``)  ``head1 ``=` `push(head1, ``6``)  ``head1 ``=` `push(head1, ``16``)  ``head1 ``=` `push(head1, ``15``)  `` ` `# create the linked list ``head2 ``=` `push(head2, ``17``)  ``head2 ``=` `push(head2, ``7``)  ``head2 ``=` `push(head2, ``6``)  ``head2 ``=` `push(head2, ``16``)  `` ` `   ` `extra(head1, head2)`

## C#

 `// C# program to find the extra node``using` `System;`` ` `class` `GFG{``     ` `// Node of the singly``// linked list``class` `Node``{``    ``public` `int` `data;``    ``public` `Node next;``};`` ` `// Function to insert a node at ``// the beginning of the singly``// Linked List``static` `Node push(Node head_ref,``                 ``int` `new_data)``{``     ` `    ``// Allocate node``    ``Node new_node = ``new` `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;``}`` ` `static` `void` `extra(Node head_ref1, ``                  ``Node head_ref2)``{``    ``int` `ans = 0;`` ` `    ``Node ptr1 = head_ref1;``    ``Node ptr2 = head_ref2;`` ` `    ``// Traverse the linked list``    ``while` `(ptr1 != ``null``)``    ``{``        ``ans ^= ptr1.data;``        ``ptr1 = ptr1.next;``    ``}``    ``while` `(ptr2 != ``null``) ``    ``{``        ``ans ^= ptr2.data;``        ``ptr2 = ptr2.next;``    ``}``    ``Console.WriteLine(ans);``}`` ` `// Driver code``public` `static` `void` `Main(String []args)``{``     ` `    ``// Start with the empty list``    ``Node head1 = ``null``;``    ``Node head2 = ``null``;``     ` `    ``// Create the linked list``    ``// 15 . 16 . 7 . 6 . 17``    ``head1 = push(head1, 17);``    ``head1 = push(head1, 7);``    ``head1 = push(head1, 6);``    ``head1 = push(head1, 16);``    ``head1 = push(head1, 15);``         ` `    ``// Second LL``    ``head2 = push(head2, 17);``    ``head2 = push(head2, 7);``    ``head2 = push(head2, 6);``    ``head2 = push(head2, 16);`` ` `    ``extra(head1, head2);``}``}`` ` `// This code is contributed by Rajput-Ji`
Output:
```15
```

Time Complexity: O(N)
Space Complexity: O(1)

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.

My Personal Notes arrow_drop_up