Open In App

Identical Linked Lists

Last Updated : 21 Aug, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

Given two singly linked lists. The task is to determine if the two linked lists are identical or not. Two linked lists are considered identical if they contain the same data in the same order. If the linked lists are identical, return true otherwise, return false.

Examples:

Input: LinkedList1: 1->2->3->4->5->6, LinkedList2: 99->59->42->20
Output: false
Explanation:

As shown in figure linkedlists are not identical.

Input: LinkedList1: 1->2->3->4->5, LinkedList2: 1->2->3->4->5
Output: true
Explanation:

As shown in figure both are identical.

[Expected Approach] By Traversal of Linked List – O(n) time and O(1) Space:

The idea is to traverse both the lists simultaneously and while traversing we need to compare data.

Code Implementation:

C++
// C++ program to check if two linked lists
// are identical or not
#include <bits/stdc++.h>
using namespace std;

struct Node
{
    int data;
    Node *next;

    Node(int val)
    {
        data = val;
        next = nullptr;
    }
};

// Returns true if linked lists head1 and head2 are
// identical, otherwise false
bool areIdentical(Node *head1, Node *head2)
{
    while (head1 != nullptr && head2 != nullptr)
    {
        if (head1->data != head2->data)
            return false;

        // Move to next nodes in both lists 
        head1 = head1->next;
        head2 = head2->next;
    }

    // If linked lists are identical,
    // both 'head1' and 'head2' must be NULL
    return (head1 == nullptr && head2 == nullptr);
}

int main()
{
    // Create first linked list: 3 -> 2 -> 1
    Node *head1 = new Node(3);
    head1->next = new Node(2);
    head1->next->next = new Node(1);

    // Create second linked list: 3 -> 2 -> 1
    Node *head2 = new Node(3);
    head2->next = new Node(2);
    head2->next->next = new Node(1);

    // Function call
    if (areIdentical(head1, head2))
        cout << "True";
    else
        cout << "False";

    return 0;
}
C
// C program to check if two linked lists
// are identical or not
#include <stdio.h>

struct Node {
    int data;
    struct Node* next;
};

// Returns true if linked lists head1 and head2 are 
// identical, otherwise false
int areIdentical(struct Node* head1, struct Node* head2) {
    while (head1 != NULL && head2 != NULL) {
        if (head1->data != head2->data)
            return 0;

        // Move to next nodes in both lists
        head1 = head1->next;
        head2 = head2->next;
    }

    // If linked lists are identical, 
  	// both 'head1' and 'head2' must be NULL
    return (head1 == NULL && head2 == NULL);
}

struct Node* createNode(int val) {
    struct Node* new_node = 
      (struct Node*)malloc(sizeof(struct Node));
    new_node->data = val;
    new_node->next = NULL;
    return new_node;
}

int main() {
    // Create first linked list: 3 -> 2 -> 1
    struct Node* head1 = createNode(3);
    head1->next = createNode(2);
    head1->next->next = createNode(1);

    // Create second linked list: 3 -> 2 -> 1
    struct Node* head2 = createNode(3);
    head2->next = createNode(2);
    head2->next->next = createNode(1);

    // Function call
    if (areIdentical(head1, head2))
        printf("True\n");
    else
        printf("False\n");

    return 0;
}
Java
// Java program to check if two linked lists
// are identical or not

class Node {
    int data;
    Node next;

    Node(int val)
    {
        data = val;
        next = null;
    }
}

class GfG {

    // Returns true if linked lists head1 and head2 are
    // identical, otherwise false
    static boolean areIdentical(Node head1, Node head2)
    {
        while (head1 != null && head2 != null) {
            if (head1.data != head2.data)
                return false;

            /* Move to next nodes in both lists */
            head1 = head1.next;
            head2 = head2.next;
        }

        // If linked lists are identical,
        // both 'head1' and 'head2' must be NULL
        return (head1 == null && head2 == null);
    }

    public static void main(String[] args)
    {
        // Create first linked list: 3 -> 2 -> 1
        Node head1 = new Node(3);
        head1.next = new Node(2);
        head1.next.next = new Node(1);

        // Create second linked list: 3 -> 2 -> 1
        Node head2 = new Node(3);
        head2.next = new Node(2);
        head2.next.next = new Node(1);

        // Function call
        if (areIdentical(head1, head2))
            System.out.println("True");
        else
            System.out.println("False");
    }
}
Python
# Python program to check if two linked lists
# are identical or not

class Node:
    def __init__(self, val):
        self.data = val
        self.next = None

# Returns true if linked lists head1 and head2 are
# identical, otherwise false
def areIdentical(head1, head2):
    while head1 is not None and head2 is not None:
        if head1.data != head2.data:
            return False

        # Move to next nodes in both lists
        head1 = head1.next
        head2 = head2.next

    # If linked lists are identical,
    # both 'head1' and 'head2' must be None
    return head1 is None and head2 is None


if __name__ == "__main__":
    # Create first linked list: 3 -> 2 -> 1
    head1 = Node(3)
    head1.next = Node(2)
    head1.next.next = Node(1)

    # Create second linked list: 3 -> 2 -> 1
    head2 = Node(3)
    head2.next = Node(2)
    head2.next.next = Node(1)

    # Function call
    if areIdentical(head1, head2):
        print("True")
    else:
        print("False")
C#
// C# program to check if two linked lists
// are identical or not
using System;

public class Node {
    public int Data;
    public Node Next;

    public Node(int val)
    {
        Data = val;
        Next = null;
    }
}

class GfG {

    // Returns true if linked lists head1 and head2 are
    // identical, otherwise false
    static bool AreIdentical(Node head1, Node head2)
    {
        while (head1 != null && head2 != null) {
            if (head1.Data != head2.Data)
                return false;

            // Move to next nodes in both lists
            head1 = head1.Next;
            head2 = head2.Next;
        }

        // If linked lists are identical,
        // both 'head1' and 'head2' must be NULL
        return (head1 == null && head2 == null);
    }

    public static void Main(string[] args)
    {
        // Create first linked list: 3 -> 2 -> 1
        Node head1 = new Node(3);
        head1.Next = new Node(2);
        head1.Next.Next = new Node(1);

        // Create second linked list: 3 -> 2 -> 1
        Node head2 = new Node(3);
        head2.Next = new Node(2);
        head2.Next.Next = new Node(1);

        if (AreIdentical(head1, head2))
            Console.WriteLine("True");
        else
            Console.WriteLine("False");
    }
}
JavaScript
// JavaScript program to check if two linked lists
// are identical or not

class Node {
    constructor(val) {
        this.data = val;
        this.next = null;
    }
}

// Returns true if linked lists head1 and head2 are 
// identical, otherwise false
function areIdentical(head1, head2) {
    while (head1 !== null && head2 !== null) {
        if (head1.data !== head2.data) {
            return false;
        }

        // Move to next nodes in both lists
        head1 = head1.next;
        head2 = head2.next;
    }

    // If linked lists are identical, 
    // both 'head1' and 'head2' must be null
    return head1 === null && head2 === null;
}

// Create first linked list: 3 -> 2 -> 1
let head1 = new Node(3);
head1.next = new Node(2);
head1.next.next = new Node(1);

// Create second linked list: 3 -> 2 -> 1
let head2 = new Node(3);
head2.next = new Node(2);
head2.next.next = new Node(1);

if (areIdentical(head1, head2)) {
    console.log("True");
} else {
    console.log("False");
}

Output
True

Time Complexity: O(n), Here n is the length of the smaller list among two linked list.
Auxiliary Space: O(1).



Next Article
Article Tags :
Practice Tags :

Similar Reads