Question 1
What does the following function do for a given Linked List with first node as head?
void fun1(struct node* head)
{
if(head == NULL)
return;
fun1(head->next);
printf("%d ", head->data);
}
void fun1(struct node* head) {
if(head == NULL)
return;
fun1(head->next);
printf("%d ", head->data);
}
void fun1(Node head) {
if(head == null)
return;
fun1(head.next);
System.out.print(head.data + " ");
}
def fun1(head):
if head is None:
return
fun1(head.next)
print(head.data, end=' ')
function fun1(head) {
if (head === null)
return;
fun1(head.next);
console.log(head.data + ' ');
}
Prints all nodes of linked lists
Prints all nodes of linked list in reverse order
Prints alternate nodes of Linked List
Prints alternate nodes in reverse order
Question 2
Which of the following points is/are true about Linked List data structure when it is compared with array?
Arrays have better cache locality that can make them better in terms of performance.
It is easy to insert and delete elements in Linked List
Random access is not allowed in a typical implementation of Linked Lists
The size of array has to be pre-decided, linked lists can change their size any time.
All of the above
Question 3
Consider the following function that takes reference to head of a Doubly Linked List as parameter. Assume that a node of doubly linked list has previous pointer as prev and next pointer as next.
void fun(struct node **head_ref) {
struct node *temp = NULL;
struct node *current = *head_ref;
while (current != NULL) {
temp = current->prev;
current->prev = current->next;
current->next = temp;
current = current->prev;
}
if (temp != NULL)
*head_ref = temp->prev;
}
void fun(struct node **head_ref)
{
struct node *temp = NULL;
struct node *current = *head_ref;
while (current != NULL)
{
temp = current->prev;
current->prev = current->next;
current->next = temp;
current = current->prev;
}
if(temp != NULL )
*head_ref = temp->prev;
}
void fun(Node[] head_ref) {
Node temp = null;
Node current = head_ref[0];
while (current != null) {
temp = current.prev;
current.prev = current.next;
current.next = temp;
current = current.prev;
}
if (temp != null)
head_ref[0] = temp.prev;
}
def fun(head_ref):
temp = None
current = head_ref[0]
while current is not None:
temp = current.prev
current.prev = current.next
current.next = temp
current = current.prev
if temp is not None:
head_ref[0] = temp.prev
function fun(head_ref) {
let temp = null;
let current = head_ref[0];
while (current !== null) {
temp = current.prev;
current.prev = current.next;
current.next = temp;
current = current.prev;
}
if (temp !== null)
head_ref[0] = temp.prev;
}
Assume that reference of head of following doubly linked list is passed to above function 1 <--> 2 <--> 3 <--> 4 <--> 5 <-->6. What should be the modified linked list after the function call?
2 <--> 1 <--> 4 <--> 3 <--> 6 <-->5
5 <--> 4 <--> 3 <--> 2 <--> 1 <-->6.
6 <--> 5 <--> 4 <--> 3 <--> 2 <--> 1.
6 <--> 5 <--> 4 <--> 3 <--> 1 <--> 2
Question 4
The following function reverse() is supposed to reverse a singly linked list. There is one line missing at the end of the function.
// Link list node
struct node
{
int data;
struct node* next;
};
// head_ref is a double pointer which points to head (or start) pointer
of linked list
static void reverse(struct node** head_ref)
{
struct node* prev = NULL;
struct node* current = *head_ref;
struct node* next;
while (current != NULL)
{
next = current->next;
current->next = prev;
prev = current;
current = next;
}
// MISSING STATEMENT HERE
}
/* Link list node */
struct node
{
int data;
struct node* next;
};
/* head_ref is a double pointer which points to head (or start) pointer
of linked list */
static void reverse(struct node** head_ref)
{
struct node* prev = NULL;
struct node* current = *head_ref;
struct node* next;
while (current != NULL)
{
next = current->next;
current->next = prev;
prev = current;
current = next;
}
/*MISSING STATEMENT HERE*/
}
// Link list node
class Node {
int data;
Node next;
Node(int d) { data = d; next = null; }
}
// head_ref is a reference to the head pointer of linked list
static void reverse(Node[] head_ref) {
Node prev = null;
Node current = head_ref[0];
Node next;
while (current != null) {
next = current.next;
current.next = prev;
prev = current;
current = next;
}
// MISSING STATEMENT HERE
}
# Link list node
class Node:
def __init__(self, data):
self.data = data
self.next = None
# head_ref is a reference to the head pointer of linked list
def reverse(head_ref):
prev = None
current = head_ref
while current is not None:
next_node = current.next
current.next = prev
prev = current
current = next_node
# MISSING STATEMENT HERE
// Link list node
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
// head_ref is a reference to the head pointer of linked list
function reverse(head_ref) {
let prev = null;
let current = head_ref;
let next;
while (current !== null) {
next = current.next;
current.next = prev;
prev = current;
current = next;
}
// MISSING STATEMENT HERE
}
What should be added in place of "/*ADD A STATEMENT HERE*/", so that the function correctly reverses a linked list.
Set the value of head_ref to prev;
Set the value of head_ref to current;
Set the value of head_ref to next;
Set the value of head_ref to NULL;
Question 5
What is the output of following function in which start is pointing to the first node of the following linked list 1->2->3->4->5->6 ?
#include <iostream>
using namespace std;
struct node {
int data;
node* next;
};
void fun(node* start) {
if (start == NULL)
return;
cout << start->data << " ";
if (start->next != NULL)
fun(start->next->next);
cout << start->data << " ";
}
void fun(struct node* start)
{
if(start == NULL)
return;
printf("%d ", start->data);
if(start->next != NULL )
fun(start->next->next);
printf("%d ", start->data);
}
class Node {
int data;
Node next;
Node(int d) { data = d; next = null; }
}
void fun(Node start) {
if (start == null)
return;
System.out.print(start.data + " ");
if (start.next != null)
fun(start.next.next);
System.out.print(start.data + " ");
}
class Node:
def __init__(self, data):
self.data = data
self.next = None
def fun(start):
if start is None:
return
print(start.data, end=' ')
if start.next is not None:
fun(start.next.next)
print(start.data, end=' ')
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
function fun(start) {
if (start === null)
return;
console.log(start.data + ' ');
if (start.next !== null)
fun(start.next.next);
console.log(start.data + ' ');
}
1 4 6 6 4 1
1 3 5 1 3 5
1 2 3 5
1 3 5 5 3 1
Question 6
The following C function takes a simply-linked list as input argument. It modifies the list by moving the last element to the front of the list and returns the modified list. Some part of the code is left blank. Choose the correct alternative that contain the correct pseudocode for the blank line.
#include <iostream>
struct Node {
int value;
Node *next;
};
Node* move_to_front(Node *head) {
Node *p, *q;
if (head == NULL || head->next == NULL)
return head;
q = NULL; p = head;
while (p->next != NULL) {
q = p;
p = p->next;
}
__________________________________
return head;
}
typedef struct node
{
int value;
struct node *next;
}Node;
Node *move_to_front(Node *head)
{
Node *p, *q;
if ((head == NULL: || (head->next == NULL))
return head;
q = NULL; p = head;
while (p-> next !=NULL)
{
q = p;
p = p->next;
}
_______________________________
return head;
}
class Node {
int value;
Node next;
Node(int value) {
this.value = value;
this.next = null;
}
}
Node moveToFront(Node head) {
Node p, q;
if (head == null || head.next == null)
return head;
q = null; p = head;
while (p.next != null) {
q = p;
p = p.next;
}
_____________________________________
return head;
}
class Node:
def __init__(self, value):
self.value = value
self.next = None
def move_to_front(head):
if head is None or head.next is None:
return head
p = head
q = None
while p.next is not None:
q = p
p = p.next
______________________________
return head
class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
function moveToFront(head) {
if (head === null || head.next === null)
return head;
let p = head;
let q = null;
while (p.next !== null) {
q = p;
p = p.next;
}
_____________________________
return head;
}
q = NULL; next of p = head; head = p;
next of q = NULL; head = p; next of p = head;
head = p; next of p = q; next of q = NULL;
next of q = NULL; next of p = head; head = p;
Question 7
The following function takes a single-linked list of integers as a parameter and rearranges the elements of the list. The function is called with the list containing the integers 1, 2, 3, 4, 5, 6, 7 in the given order. What will be the contents of the list after the function completes execution?
class Node {
public:
int value;
Node* next;
};
void rearrange(Node* list) {
Node* p;
Node* q;
int temp;
if (list == nullptr || list->next == nullptr) {
return;
}
p = list;
q = list->next;
while (q != nullptr) {
temp = p->value;
p->value = q->value;
q->value = temp;
p = q->next;
q = (p != nullptr) ? p->next : nullptr;
}
}
struct Node {
int value;
struct Node* next;
};
void rearrange(struct Node* list) {
struct Node* p;
struct Node* q;
int temp;
if (list == NULL || list->next == NULL) {
return;
}
p = list;
q = list->next;
while (q != NULL) {
temp = p->value;
p->value = q->value;
q->value = temp;
p = q->next;
q = (p != NULL) ? p->next : NULL;
}
}
class Node {
int value;
Node next;
}
void rearrange(Node list) {
Node p, q;
int temp;
if (list == null || list.next == null) {
return;
}
p = list;
q = list.next;
while (q != null) {
temp = p.value;
p.value = q.value;
q.value = temp;
p = q.next;
q = p != null ? p.next : null;
}
}
class Node:
def __init__(self, value):
self.value = value
self.next = None
def rearrange(head):
if head is None or head.next is None:
return
p = head
q = head.next
while q is not None:
p.value, q.value = q.value, p.value
p = q.next
q = p.next if p is not None else None
class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
function rearrange(list) {
if (list === null || list.next === null) {
return;
}
let p = list;
let q = list.next;
while (q !== null) {
[p.value, q.value] = [q.value, p.value];
p = q.next;
q = p !== null ? p.next : null;
}
}
1,2,3,4,5,6,7
2,1,4,3,6,5,7
1,3,2,5,4,7,6
2,3,4,5,6,7,1
Question 8
Suppose each set is represented as a linked list with elements in arbitrary order. Which of the operations among union, intersection, membership, cardinality will be the slowest? (GATE CS 2004)
union
membership
cardinality
union, intersection
Question 9
Consider the function f defined below.
#include <iostream>
struct item {
int data;
struct item *next;
};
int f(struct item *p) {
return (
(p == NULL) ||
(p->next == NULL) ||
((p->data <= p->next->data) && f(p->next))
);
}
struct item
{
int data;
struct item * next;
};
int f(struct item *p)
{
return (
(p == NULL) ||
(p->next == NULL) ||
(( p->data <= p->next->data) && f(p->next))
);
}
class Item {
int data;
Item next;
Item(int data) {
this.data = data;
this.next = null;
}
}
public class Main {
public static boolean f(Item p) {
return (
(p == null) ||
(p.next == null) ||
((p.data <= p.next.data) && f(p.next))
);
}
}
class Item:
def __init__(self, data):
self.data = data
self.next = None
def f(p):
return (
p is None or
p.next is None or
(p.data <= p.next.data and f(p.next))
)
class Item {
constructor(data) {
this.data = data;
this.next = null;
}
}
function f(p) {
return (
p === null ||
p.next === null ||
(p.data <= p.next.data && f(p.next))
);
}
For a given linked list p, the function f returns 1 if and only if (GATE CS 2003)
not all elements in the list have the same data value.
the elements in the list are sorted in non-decreasing order of data value
the elements in the list are sorted in non-increasing order of data value
None of them
Question 10
A circularly linked list is used to represent a Queue. A single variable p is used to access the Queue. To which node should p point such that both the operations enQueue and deQueue can be performed in constant time? (GATE 2004)
rear node
front node
not possible with a single pointer
node next to front
There are 39 questions to complete.