Compara dos strings representadas como listas enlazadas

Dadas dos strings, representadas como listas enlazadas (cada carácter es un Node en una lista enlazada). Escriba una función compare() que funcione de manera similar a strcmp(), es decir, devuelva 0 si ambas strings son iguales, 1 si la primera lista enlazada es lexicográficamente mayor y -1 si la segunda string es lexicográficamente mayor.

Ejemplos: 

C++

// C++ program to compare two strings 
// represented as linked lists
#include<bits/stdc++.h>
using namespace std;
   
// Linked list Node structure
struct Node
{
    char c;
    struct Node *next;
};
   
// Function to create newNode in a linkedlist
Node* newNode(char c)
{
    Node *temp = new Node;
    temp->c = c;
    temp->next = NULL;
    return temp;
};
  
int compare(Node *list1, Node *list2) 
{    
    // Traverse both lists. Stop when 
    // either end of a linked list is reached 
    // or current characters don't match
    while (list1 && list2 && 
           list1->c == list2->c) 
    {         
        list1 = list1->next;
        list2 = list2->next;
    }
      
    // If both lists are not empty, 
    // compare mismatching characters
    if (list1 && list2) 
        return (list1->c > list2->c)? 1: -1;
  
    // If either of the two lists 
    // has reached end
    if (list1 && !list2) return 1;
    if (list2 && !list1) return -1;
      
    // If none of the above conditions is true,
    // both lists have reached end 
    return 0;
}
  
// Driver code
int main()
{
    Node *list1 = newNode('g');
    list1->next = newNode('e');
    list1->next->next = newNode('e');
    list1->next->next->next = newNode('k');
    list1->next->next->next->next = 
        newNode('s');
    list1->next->next->next->next->next = 
        newNode('b');
  
    Node *list2 = newNode('g');
    list2->next = newNode('e');
    list2->next->next = newNode('e');
    list2->next->next->next = newNode('k');
    list2->next->next->next->next = 
        newNode('s');
    list2->next->next->next->next->next = 
        newNode('a');
  
    cout << compare(list1, list2);
    return 0;
}

Java

// Java program to compare two strings represented as a linked list
  
// Linked List Class
class LinkedList {
  
    Node head;  // head of list
    static Node a, b;
  
    /* Node Class */
    static class Node {
  
        char data;
        Node next;
  
        // Constructor to create a new node
        Node(char d) {
            data = d;
            next = null;
        }
    }
  
    int compare(Node node1, Node node2) {
  
        if (node1 == null && node2 == null) {
            return 1;
        }
        while (node1 != null && node2 != null && node1.data == node2.data) {
            node1 = node1.next;
            node2 = node2.next;
        }
  
        // if the list are different in size
        if (node1 != null && node2 != null) {
            return (node1.data > node2.data ? 1 : -1);
        }
  
        // if either of the list has reached end
        if (node1 != null && node2 == null) {
            return 1;
        }
        if (node1 == null && node2 != null) {
            return -1;
        }
        return 0;
    }
  
    public static void main(String[] args) {
  
        LinkedList list = new LinkedList();
        Node result = null;
  
        list.a = new Node('g');
        list.a.next = new Node('e');
        list.a.next.next = new Node('e');
        list.a.next.next.next = new Node('k');
        list.a.next.next.next.next = new Node('s');
        list.a.next.next.next.next.next = new Node('b');
  
        list.b = new Node('g');
        list.b.next = new Node('e');
        list.b.next.next = new Node('e');
        list.b.next.next.next = new Node('k');
        list.b.next.next.next.next = new Node('s');
        list.b.next.next.next.next.next = new Node('a');
  
        int value;
        value = list.compare(a, b);
        System.out.println(value);
  
    }
}
  
// This code has been contributed by Mayank Jaiswal

Python3

# Python program to compare two strings represented as
# linked lists
  
# A linked list node structure
class Node:
  
    # Constructor to create a new node
    def __init__(self, key):
        self.c = key ; 
        self.next = None
  
def compare(list1, list2):
      
    # Traverse both lists. Stop when either end of linked 
    # list is reached or current characters don't match
    while(list1 and list2 and list1.c == list2.c):
        list1 = list1.next 
        list2 = list2.next 
  
    # If both lists are not empty, compare mismatching
    # characters 
    if(list1 and list2):
        return 1 if list1.c > list2.c else -1 
  
    # If either of the two lists has reached end
    if (list1 and not list2):
        return 1 
  
    if (list2 and not list1):
        return -1 
    return 0
  
# Driver program
  
list1 = Node('g')
list1.next = Node('e')
list1.next.next = Node('e')
list1.next.next.next = Node('k')
list1.next.next.next.next = Node('s')
list1.next.next.next.next.next = Node('b')
  
list2 = Node('g')
list2.next = Node('e')
list2.next.next = Node('e')
list2.next.next.next = Node('k')
list2.next.next.next.next = Node('s')
list2.next.next.next.next.next = Node('a')
  
print (compare(list1, list2))
  
# This code is contributed by Nikhil Kumar Singh(nickzuck_007)

C#

// C# program to compare two 
// strings represented as a linked list
using System;
  
// Linked List Class
public class LinkedList
{
  
    public Node head; // head of list
    public Node a, b;
  
    /* Node Class */
    public class Node 
    {
  
        public char data;
        public Node next;
  
        // Constructor to create a new node
        public Node(char d) 
        {
            data = d;
            next = null;
        }
    }
  
    int compare(Node node1, Node node2)
    {
  
        if (node1 == null && node2 == null) 
        {
            return 1;
        }
        while (node1 != null && 
                node2 != null && 
                node1.data == node2.data)
        {
            node1 = node1.next;
            node2 = node2.next;
        }
  
        // if the list are different in size
        if (node1 != null && node2 != null) 
        {
            return (node1.data > node2.data ? 1 : -1);
        }
  
        // if either of the list has reached end
        if (node1 != null && node2 == null)
        {
            return 1;
        }
        if (node1 == null && node2 != null)
        {
            return -1;
        }
        return 0;
    }
  
    // Driver code
    public static void Main(String[] args) 
    {
  
        LinkedList list = new LinkedList();
  
        list.a = new Node('g');
        list.a.next = new Node('e');
        list.a.next.next = new Node('e');
        list.a.next.next.next = new Node('k');
        list.a.next.next.next.next = new Node('s');
        list.a.next.next.next.next.next = new Node('b');
  
        list.b = new Node('g');
        list.b.next = new Node('e');
        list.b.next.next = new Node('e');
        list.b.next.next.next = new Node('k');
        list.b.next.next.next.next = new Node('s');
        list.b.next.next.next.next.next = new Node('a');
  
        int value;
        value = list.compare(list.a, list.b);
        Console.WriteLine(value);
    }
}
  
// This code contributed by Rajput-Ji

Javascript

<script>
  
// Javascript program to compare two 
// strings represented as a linked list
  
// Linked List Class
var head; // head of list
    var a, b;
  
    /* Node Class */
     class Node {
  
  
        // Constructor to create a new node
         constructor(d) {
                this.data = d;
                this.next = null;
            }
    }
  
    function compare(node1,  node2) {
  
        if (node1 == null && node2 == null) {
            return 1;
        }
        while (node1 != null && node2 != null && 
        node1.data == node2.data) {
            node1 = node1.next;
            node2 = node2.next;
        }
  
        // if the list are different in size
        if (node1 != null && node2 != null) {
            return (node1.data > node2.data ? 1 : -1);
        }
  
        // if either of the list has reached end
        if (node1 != null && node2 == null) {
            return 1;
        }
        if (node1 == null && node2 != null) {
            return -1;
        }
        return 0;
    }
  
      
  
var result = null;
  
        a = new Node('g');
        a.next = new Node('e');
        a.next.next = new Node('e');
        a.next.next.next = new Node('k');
        a.next.next.next.next = new Node('s');
        a.next.next.next.next.next = new Node('b');
  
        b = new Node('g');
        b.next = new Node('e');
        b.next.next = new Node('e');
        b.next.next.next = new Node('k');
        b.next.next.next.next = new Node('s');
        b.next.next.next.next.next = new Node('a');
  
        var value;
        value = compare(a, b);
        document.write(value);
  
  
// This code contributed by gauravrajput1
  
</script>

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *