Untitled

mail@pastecode.io avatarunknown
plain_text
2 months ago
2.5 kB
1
Indexable
Never
#include <stdio.h>
#include <stdlib.h>

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

/* Given a reference (pointer to pointer) to the head
of a list and an int, appends a new node at the end */
void append(struct Node** head_ref, int new_data)
{
    /* 1. allocate node */
    struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));

    struct Node *last = *head_ref;
    int return_val = 0;

    new_node->data = new_data;
    new_node->next = NULL;

    if (*head_ref == NULL)
    {
        *head_ref = new_node;
        return_val = 1;
    }

    if (return_val != 1)
    {
        while (last->next != NULL)
            last = last->next;

        last->next = new_node;
    }

    return;
}

/*
Function to check if the 2 linked lists have the same data.
Return 1 if yes.
Return 0 if no.
*/
int compareList(struct Node* head_ref1, struct Node* head_ref2)
{
    if (head_ref1 == NULL && head_ref2 == NULL)
        return 1; // Both lists are empty, consider them identical

    int result = 1;
    while (head_ref1 != NULL && head_ref2 != NULL)
    {
        if (head_ref1->data != head_ref2->data)
        {
            result = 0;
            break;
        }
        head_ref1 = head_ref1->next;
        head_ref2 = head_ref2->next;
    }

    // If both lists are not empty or one list is not finished while the other is, they are not identical
    if (head_ref1 != NULL || head_ref2 != NULL)
        result = 0;

    return result;
}

// This function prints contents of linked list starting from head
void printList(struct Node* node)
{
    while (node != NULL)
    {
        printf("%d ", node->data);
        node = node->next;
    }
}

int main()
{
    /* Start with the empty list */
    struct Node* head1 = NULL;
    struct Node* head2 = NULL;

    /* Start code segment to read input: Do not touch */
    int num_of_inputarray;
    int i = 0;
    int input_integer;
    scanf("%d", &num_of_inputarray);

    for (i = 0; i < num_of_inputarray; i++)
    {
        scanf("%d", &input_integer);
        append(&head1, input_integer);
    }

    scanf("%d", &num_of_inputarray);

    for (i = 0; i < num_of_inputarray; i++)
    {
        scanf("%d", &input_integer);
        append(&head2, input_integer);
    }
    /* End code segment to read input: Do not touch */

    printf("%d", compareList(head1, head2));

    return 0;
}