Find extra node in the second Linked list
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 <bits/stdc++.h> 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 of 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
<script> // Javascript program to find the // extra node // Node of the singly linked // list class Node { constructor() { this .data = 0; this .next = null ; } }; // Function to insert a node at // the beginning of the singly // Linked List function push(head_ref, new_data) { // allocate node var new_node = new Node(); // put in the data new_node.data = new_data; // link the old list of the // new node new_node.next = (head_ref); // move the head to point to // the new node (head_ref) = new_node; return head_ref; } function print(head_ref, head_ref1) { var ans = 0; var ptr1 = head_ref; var 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 // start with the empty list var head1 = null ; var 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); // second LL head2 = push(head2, 17); head2 = push(head2, 7); head2 = push(head2, 6); head2 = push(head2, 16); head1 = push(head1, 15); var k = print(head1, head2); document.write( k); // This code is contributed by noob2000. </script> |
Output:
15
Time Complexity: O(N)
Space Complexity: O(1)
Please Login to comment...