+1 vote
113 views
p=head;
while(A)
{
.......................................
}


A is the condition to see list is empty or not, which one is valid?

a) p!=NULL;

b) q!=NULL;

c)(p!=NULL)&&(q!=NULL)

d)(p!=NULL)||(q!=NULL)

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

a) p!=NULL;

b) q!=NULL;

c)(p!=NULL)&&(q!=NULL)

d)(p!=NULL)||(q!=NULL)

edited | 113 views
Added the last part. Say what will be answer now and why?
Should be option B
how, explain in detail

Option B is correct.

If q!=Null then p is definitely not equal to Null.

The code must not enter the body of while loop if q=Null, this is because,

Observe this statement,

p = (p->next)? (p->next->next) : (p->next);

if at all p=Null then the condition (p->next) gives segmentation fault as it tries to access the next of Null.

@shreya here p moves one by one, while q moves two at a time whenever q is not pointing to last node... so if list will end q can detect it easily [q!=NULL] but the above code will work only if list has atleast one element..consider empty list... then p-> head [which is null for empty list] and q = head->next ..so now while loop condition should give runtime error as q is saying to point next of NULL.

List is empty means there would not be any node in the list. Means the pointer "head" should point to Null.

'q' will be considered if there exist atleast a single node. So all other three option will be eliminated.(As question is talking about empty list.)

Option A is correct.