剑指offer之判断链表是否包含环
1问题
判断链表是否包含环
2思路
2个指针,一个指针走一步,一个指针走2步,如果相遇则有,反之无。
3代码实现
#include#include #definetrue1 #definefalse0; typedefstructnode { intvalue; structnode*next; }Node; /* *判断链表是否有环 */ intisCircleList(Node*head) { if(head==NULL) { returnfalse; } Node*first=NULL; Node*second=NULL; first=head; second=head; while(second!=NULL&&(second->next)!=NULL&&(second->next->next!=NULL)) { first=first->next; second=second->next->next; if(first==second) { returntrue; } } returnfalse; } intmain() { Node*head=NULL; Node*node1=NULL; Node*node2=NULL; Node*node3=NULL; Node*node4=NULL; Node*node5=NULL; Node*node6=NULL; Node*node7=NULL; head=(Node*)malloc(sizeof(Node)); node1=(Node*)malloc(sizeof(Node)); node2=(Node*)malloc(sizeof(Node)); node3=(Node*)malloc(sizeof(Node)); node4=(Node*)malloc(sizeof(Node)); node5=(Node*)malloc(sizeof(Node)); node6=(Node*)malloc(sizeof(Node)); node7=(Node*)malloc(sizeof(Node)); if(head==NULL||node1==NULL||node2==NULL||node3==NULL ||node4==NULL||node5==NULL||node6==NULL||node7==NULL) { printf("mallocfail\n"); returnfalse; } //node7<-node6<-node5 //|| //head->node1->node2->node3->node4 head->value=0; head->next=node1; node1->value=1; node1->next=node2; node2->value=2; node2->next=node3; node3->value=3; node3->next=node4; node4->value=4; node4->next=node5; node5->value=5; node5->next=node6; node6->value=6; node6->next=node7; node7->value=7; node7->next=node2; intresult=isCircleList(head); if(result) { printf("listhavecircle\n"); } else { printf("listdonothavecircle\n"); } returntrue; }
4运行结果
listhavecircle
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。