剑指offer之判断链表是否包含环
2019-10-21 18:06
1866 查看
1 问题
判断链表是否包含环
2 思路
2个指针,一个指针走一步,一个指针走2步,如果相遇则有,反之无。
3 代码实现
#include <stdio.h> #include <stdlib.h> #define true 1 #define false 0; typedef struct node { int value; struct node *next; }Node; /* *判断链表是否有环 */ int isCircleList(Node *head) { if (head == NULL) { return false; } 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) { return true; } } return false; } int main() { 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("malloc fail\n"); return false; } // 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; int result = isCircleList(head); if (result) { printf("list have circle\n"); } else { printf("list do not have circle\n"); } return true; }
4 运行结果
list have circle
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接
您可能感兴趣的文章:
相关文章推荐
- 剑指offer--判断链表是否带环?若带环求环的长度?若带环求环的入口点?
- 剑指offer面试题-判断链表是否带环并求环的入口点和环的长度
- 【面试题】剑指offer18--判断一个二叉树是否为另一个二叉树的子结构
- 【剑指offer】【二维数组中的查找】【有序二维数组整数查找】【判断二维数组是否为空方法】
- 剑指Offer——从扑克中抽五张牌,判断是否是连续的五张
- 剑指offer 面试题18 判断二叉树B是否是A的子结构
- July大神微软等100题之第7题------判断两个链表相交(包含有无环),链表是否有环题目总结
- 剑指offer-01-判断数组中是否含有某整数
- 剑指offer——面试题39:扩展问题判断一个树是否是平衡二叉树(递归)
- java剑指offer给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
- 剑指offer-----判断二叉树是否对称(java版)
- 【剑指offer】判断二叉树是否平衡(左右子树高度差最多为1)
- 【面试题】剑指Offer-18-判断一颗树是否为另一颗树的子树
- 剑指offer-判断该二叉树是否是平衡二叉树
- 剑指offer 6.3 知识迁移能力3- 判断二叉树是否是平衡二叉树
- 剑指Offer学习总结-判断二叉树是否是平衡二叉树
- 剑指-判断一个单向链表是否形成了环形结构
- 剑指offer 输入一棵二叉树,判断该二叉树是否是平衡二叉树。
- 剑指offer-根据入栈顺序判断出栈顺序是否正确
- 【剑指offer】判断是否是对称的二叉树