How will u find whether a linked list has a loop or not?
Answers were Sorted based on User's Feedback
Answer / sivaraj
BOOL findloop(struct node *start)
{
struct node *ptr,*ptr1;
ptr=start;
ptr1= start->next;
while(ptr!=NULL && ptr->next!=null && ptr1->next!=null &&
ptr1->next->next!=null)
{
if(ptr==ptr1)
return FALSE;
ptr=ptr->next;
ptr1=ptr1->next->next;
}
return TRUE;
}
| Is This Answer Correct ? | 16 Yes | 5 No |
Answer / sanyam
the approach is to mark the nodes starting from the head.and
follow the links.
in the process if you find a node already marked then there
is loop.
| Is This Answer Correct ? | 13 Yes | 2 No |
Answer / priya
same logic as 3rd answer..
typedef struct node
{ int data,mark; /*mark is all initialised to 0*/
node *next;
}node;
node* findloop(node* start)
{
node *p=start;
while(p)
{
if(p->mark==0)
{
p->mark=1;
p=p->next;
}
else
{
return p;
}
}
return p;
}
| Is This Answer Correct ? | 3 Yes | 3 No |
Answer / karthik
I guess the return shud b TRUE in the if(ptr==ptr1) block
since that's the oly condition for presence of a loop in the
LL.. and return shud b a false after d while loop!!!
| Is This Answer Correct ? | 0 Yes | 0 No |
Answer / zameer arif
You are right. In the loop, return should be true. outside
the loop, false.
| Is This Answer Correct ? | 0 Yes | 0 No |
Answer / anurag srivastava
void lopp( node **start)
{
node *temp,*newnode;
temp=*start;
while(*temp && !(temp->next==start))
{ temp=temp->next; }
if(!(*temp)) printf("Non loop");
else printf("Loop");
}
| Is This Answer Correct ? | 3 Yes | 5 No |
Answer / s.v.prasad reddy
findloop(struct node *start)
{
struct node *ptr,*ptr1;
start=ptr;
while(ptr!=NULL)
{
ptr1=ptr->next;
while(ptr1!=NULL)
{
if(ptr1->link==ptr->link)
{
printf("\nLoop found at %d node",ptr->data);
exit(0);
}
ptr1=ptr1->link;
}
ptr=ptr->link;
}
printf("\nNo Loop found in list");
}
| Is This Answer Correct ? | 9 Yes | 17 No |
#define clrscr() 100 main() { clrscr(); printf("%d\n",clrscr()); }
main() { extern i; printf("%d\n",i); { int i=20; printf("%d\n",i); } }
main() { char *p; printf("%d %d ",sizeof(*p),sizeof(p)); }
main() { if ((1||0) && (0||1)) { printf("OK I am done."); } else { printf("OK I am gone."); } } a. OK I am done b. OK I am gone c. compile error d. none of the above
write a c program to Create employee record by taking details like name, employee id, address and phone number. While taking the phone number, take either landline or mobile number. Ensure that the phone numbers of the employee are unique. Also display all the details
print a semicolon using Cprogram without using a semicolon any where in the C code in ur program!!
35 Answers Tata Elxsi, TCS, VI eTrans,
main() { int i =10, j = 20; clrscr(); printf("%d, %d, ", j-- , --i); printf("%d, %d ", j++ , ++i); } a. 20, 10, 20, 10 b. 20, 9, 20, 10 c. 20, 9, 19, 10 d. 19, 9, 20, 10
What is the output for the program given below typedef enum errorType{warning, error, exception,}error; main() { error g1; g1=1; printf("%d",g1); }
typedef struct error{int warning, error, exception;}error; main() { error g1; g1.error =1; printf("%d",g1.error); }
main() { { unsigned int bit=256; printf("%d", bit); } { unsigned int bit=512; printf("%d", bit); } } a. 256, 256 b. 512, 512 c. 256, 512 d. Compile error
Finding a number which was log of base 2
main() { int i=3; switch(i) { default:printf("zero"); case 1: printf("one"); break; case 2:printf("two"); break; case 3: printf("three"); break; } }