Open In App

Find extra node in the second Linked list

Last Updated : 15 Nov, 2022
Summarize
Comments
Improve
Suggest changes
Like Article
Like
Save
Share
Report
News Follow

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)
 



Next Article

Similar Reads

three90RightbarBannerImg
  翻译: