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