The Gateway to Computer Science Excellence
First time here? Checkout the FAQ!
x
+25 votes
3.4k views

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 $\text{enQueue}$ and $\text{deQueue}$ can be performed in constant time?

  

 

  1. rear node
  2. front node
  3. not possible with a single pointer
  4. node next to front
asked in DS by Veteran (69k points) | 3.4k views

6 Answers

+49 votes
Best answer

The pointer points to the Rear node.


EnQueue: Insert newNode after Rear, and make Rear point to the newly inserted node: 

//struct node *newNode;
newNode->next = rear->next;
rear->next = newNode;
rear=newNode;

DeQueue: Delete the Front node, and make the second node the front node.

//rear->next points to the front node.
//front->next points to the second node.
struct node* front;
front = rear->next;
rear->next = front->next;
free(front);

 

answered by Veteran (20.7k points)
selected by

Awesome answeryes

what does constant time means in the questn...?
@Dhalrya: Constant time means $\Theta(1)$ time
thank u Pragya...:)
@pragy.am nott getting this solution , can u plzz explain
Why we are using another front to delete previous front ? This code is much better I think...

temp = front ;

rear --> next = temp --> next;

front = rear --> next;

free (temp);
they were not metioned rear and front why are u taking rear and front????????????????????????????????????

i m in confusion
why u r taking newnode pointer because in question it is mentioned that single pointer p is used ...........answer should be c
You can't use $front$ and $rear$ pointers. You only have to use pointer $p$. Although the answer *is* "rear node", your implementation of $enQueue()$ and $deQueue()$ is wrong.
@ pragy

how can you use front and rear bcoz A single variable p is used to access the Queue
@rajoramanoj  read the question  and explanations  (of pragya) again
Why are we using front pointer? Although it is possible but the question says single variable is used to access linked list .We should not create new variable.Please clarify
@Arjun Sir i think this is wrong explanation they have not mentioned any front and rear pointer in the question we can only make use of p pointer
@srestha dont u think he used additional pointers which were not mentioned in the question .. only one pointer should be used

@habedo007

If answer is rear node,then it is not possible with one pointer p.

@ Venkat 

@rahul

front is not extra created

It is already in question

just we need to free(front)

 

@Rahul Sharma But GATE asked to implement it with one node only.
+6 votes

The pointer points to the Rear node.


EnQueue: Insert newNode after Rear, and make Rear point to the newly inserted node:

//struct node *newNode;
newNode->next = p->next;
p->next = newNode;
rear=newNode;

DeQueue: Delete the Front node, and make the second node the front node.

rear->next = rear->next->next;
answered by Loyal (2.6k points)

what does constant time means in the questn...?

simply we are not traversing queue thats why we not using extra time . we are performing both the opration in constant time. like O(1)
This is not deletion. Memory is not de allocated
Yup. Hence not possible with a single pointer p.
+3 votes

Answer should be A.

Given a linked list we always have a head pointer , which points to 1st node of the list. so dequeue can be done in O(1) time.

Now P should point to Last node(rear), so as to perform enqueue in constant time.

answered by Junior (979 points)
–2 votes
I think there is no front or rear pointer here only p pointer so enQueue() and deQueue operation should be this

1.) newNode-->next=p-->next-->next;

2.) p-->next-->next=NULL;

3.) free(p-->next);

4.) p-->next=newNode;
answered by Veteran (10k points)
@One

yes u r right they were not mentioned about rear and front pointers they only give us pointer P
–2 votes
answer should be C

enqueue is possible with 1 pointer but for dequeue we have to take 1 more pointer bcoz if dequeue compulsory we have to free the memory also which is not possible with only 1 pointer.if modify then we can do whatever we want but in dequeue free the memory also.

@ arjun sir plz verify
answered by Boss (8.4k points)

Bikram sir plz verify this ans 

@Arjun sir what he said is correct answer should be C if we take use of front and rear whats the use of giving temporary pointer P even without it we can do
i was also thinking the same. answer should be c.
–2 votes
Answer can be both....if p points to rear then answer is already given

Now the  case if p points to front:

Enqueue:

1.save the data of the node pointed by p in a temp variable.

2.copy the data of new node to the node p is pointing to.

3.copy the data of the temp variable to the new node created

4.make newnode->next=p->next point to the new node

5.make p->next=newnode

6.make p=p->next

 

Dequeue:

1.copy the data of the node in p->next to p.

2.make p->next=p->next->next
answered by Loyal (4.1k points)
@Arjun sir : please check this


Quick search syntax
tags tag:apple
author user:martin
title title:apple
content content:apple
exclude -tag:apple
force match +apple
views views:100
score score:10
answers answers:2
is accepted isaccepted:true
is closed isclosed:true

33,687 questions
40,230 answers
114,269 comments
38,800 users