# Find extra node in the second Linked list

• Difficulty Level : Hard
• Last Updated : 18 Jun, 2021

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

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`

## Javascript

 ``
Output:
`15`

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

My Personal Notes arrow_drop_up