Encuentra un Node extra en la segunda lista Vinculada

Dadas dos listas enlazadas L1 y L2. La segunda lista L2 contiene todos los Nodes de L1 junto con 1 Node adicional. La tarea es encontrar ese Node adicional. 
Ejemplos: 
 

Entrada: L1 = 17 -> 7 -> 6 -> 16 
L2 = 17 -> 7 -> 6 -> 16 -> 15 
Salida: 15 
Explicación: 
El elemento 15 no está presente en la lista L1
Entrada: L1 = 10 -> 15 -> 5 
L2 = 10 -> 100 -> 15 -> 5 
Salida: 100 
 

Enfoque ingenuo: 
 

  • Ejecute bucles anidados y encuentre los Nodes en L2 que no están presentes en L1. 
     
  • La complejidad temporal de este enfoque será O(N 2 ) donde N es la longitud de la lista enlazada. 
     

Enfoque eficiente: 
 

  • Si todos los Nodes de L1 y L2 son XOR juntos, cada Node de A[] dará 0 con su aparición en L2 y el elemento adicional dice X cuando XORed con 0 dará (X XOR 0) = X, que es el resultado . 
     

A continuación se muestra la implementación del enfoque anterior:
 

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

<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 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;
}
 
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>
Producción: 

15

 

Complejidad de tiempo: O(N) 
Complejidad de espacio: O(1)
 

Publicación traducida automáticamente

Artículo escrito por ShivaTeja2 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *