how to check whether a linked list is circular.
Answers were Sorted based on User's Feedback
Answer / coder_1
Create two pointers, each set to the start of the list.
Update each as follows:
while (pointer1) {
pointer1 = pointer1->next;
pointer2 = pointer2->next; if (pointer2)
pointer2=pointer2->next;
if (pointer1 == pointer2) {
print (\"circular\n\");
}
}
If a list is circular, at some point pointer2 will wrap
around and be either at the item just before pointer1, or
the item before that. Either way, it?s either 1 or 2 jumps
until they meet.
Is This Answer Correct ? | 86 Yes | 34 No |
Answer / pratyu
node *ptr1,*ptr2;
ptr1=head;
ptr2=head->next;
while(ptr2)
{
if(ptr1==ptr2)
printf("circular linked list");
ptr2=ptr2->next;
}
printf("not a circular linked list");
Is This Answer Correct ? | 31 Yes | 7 No |
Answer / priya
This is the function to check if the linklist is circular:
bool CLinklist::ifcircular()
{
node *ptr1,*ptr2;
ptr1 = front;
ptr2 = front;
while(ptr1)
{
ptr1 = ptr1->link;
ptr2 = ptr2->link;
if(ptr2)
ptr2 = ptr2->link;
if(ptr1 == ptr2)
return 1;
}
}
Is This Answer Correct ? | 15 Yes | 7 No |
consider home pointer as the starting pointer of the linked
list.
consider temp as the temporary pointer.
temp = home;
while(temp != NULL)
{
if(temp -> next == start)
{
flag = 1;
break;
}
else
flag = 0;
temp = temp -> next;
}
if(flag == 1)
printf("Circular");
else
printf("Not circular");
Is This Answer Correct ? | 30 Yes | 30 No |
Answer / nirwal
hi All
specialy the two pointer solution techies
what about the loop in the link list ?
how you differentiate b/w circular list and list having the
loop?
Think again...........
Is This Answer Correct ? | 4 Yes | 4 No |
Answer / abhi
while(q->next->next=NULL)
{
p=p->next;
q=q->next->next;
if(p==q)
{
printf("loof is find");
break;
}
}
Is This Answer Correct ? | 2 Yes | 2 No |
Answer / shahid khan abbasi
bool hasCircle(List l)
{
Iterator i = l.begin(), j = l.begin();
while (true) {
// increment the iterators, if either is at the end,
you're done, no circle
if (i.hasNext()) i = i.next(); else return false;
// second iterator is travelling twice as fast as first
if (j.hasNext()) j = j.next(); else return false;
if (j.hasNext()) j = j.next(); else return false;
// this should be whatever test shows that the two
// iterators are pointing at the same place
if (i.getObject() == j.getObject()) {
return true;
}
}
}
Is This Answer Correct ? | 2 Yes | 3 No |
Answer / burmeselady
start from pointer1
check all node's next pointer is null or not starting from
pointer1 until pointer1
if a node next pointer is null=> it is not circular.
else it is circular
Is This Answer Correct ? | 5 Yes | 7 No |
Answer / ishan
by checking whether link field in the last node contains
the address of the first node.
Is This Answer Correct ? | 17 Yes | 20 No |
Answer / lohitha
node *ptr1,*ptr2;
ptr1=head;
ptr2=head->next;
while(ptr2)
{
if(ptr1==ptr2)
{
printf("circular linked list");
break;
}
ptr2=ptr2->next;
}
printf("not a circular linked list");
Is This Answer Correct ? | 3 Yes | 6 No |
main() { char c=' ',x,convert(z); getc(c); if((c>='a') && (c<='z')) x=convert(c); printf("%c",x); } convert(z) { return z-32; }
write a program in c language to get the value of arroy keys pressed and display the message which arrow key is pressed?
main() { char *p = "hello world"; p[0] = 'H'; printf("%s", p); } a. Runtime error. b. “Hello world” c. Compile error d. “hello world”
main( ) { int a[ ] = {10,20,30,40,50},j,*p; for(j=0; j<5; j++) { printf(“%d” ,*a); a++; } p = a; for(j=0; j<5; j++) { printf(“%d ” ,*p); p++; } }
How to access command-line arguments?
How to read a directory in a C program?
struct Foo { char *pName; }; main() { struct Foo *obj = malloc(sizeof(struct Foo)); clrscr(); strcpy(obj->pName,"Your Name"); printf("%s", obj->pName); } a. Your Name b. compile error c. Name d. Runtime error
main() { unsigned int i=10; while(i-->=0) printf("%u ",i); }
main() { int c[ ]={2.8,3.4,4,6.7,5}; int j,*p=c,*q=c; for(j=0;j<5;j++) { printf(" %d ",*c); ++q; } for(j=0;j<5;j++){ printf(" %d ",*p); ++p; } }
void main() { while(1){ if(printf("%d",printf("%d"))) break; else continue; } }
main(){ unsigned int i; for(i=1;i>-2;i--) printf("c aptitude"); }
Write a C program to add two numbers before the main function is called.