GATE CS 2025 Set 1 | Question 62

NAT · 2 marks

Let LIST be a datatype for an implementation of linked list defined as follows:

typedef struct list {
    int data;
    struct list *next;
} LIST;

Suppose a program has created two linked lists, L1 and L2, whose contents are given in the figure below (code for creating L1 and L2 is not provided here). L1 contains 9 nodes, and L2 contains 7 nodes.

Consider the following C program segment that modifies the list L1. The number of nodes that will be there in L1 after the execution of the code segment is ________ . (Answer in integer)

L1: 1, 7, 12, 3, 9, 5, 11, 15, 8 and L2: 1, 11, 6, 9, 15, 12, 4, each ending in NULL
int find (int query, LIST *list) {
    while (list != NULL){
        if(list->data == query) return 1;
        list = list->next;
    }
    return 0;
}
int main () {
      … … …
    ptr1=L1; ptr2=L2;
    while (ptr1->next != NULL){
        query = ptr1->next->data;
        if (find (query, L2))
            ptr1->next = ptr1->next->next;
        else ptr1 = ptr1->next;
    }
      … … …
    return 0;
}

Answer

5

Explanation

The loop always tests the node after ptr1, so the head of L1 is never examined. If that next value is in L2, the node is unlinked and ptr1 stays where it is; otherwise ptr1 moves forward.

L2 holds {1, 11, 6, 9, 15, 12, 4}. Going through L1 after the head: 7 kept, 12 removed, 3 kept, 9 removed, 5 kept, 11 removed, 15 removed, 8 kept.

L1 becomes 1 → 7 → 3 → 5 → 8. The head node 1 stays even though 1 is also in L2.

Answer: 5