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->node4head->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之判断链表是否包含环相关推荐

  1. 剑指offer之找到链表里面包含环的入口节点

    1 问题 剑指offer之找到链表里面包含环的入口节点,比如 // node7<-node6 <-node5// | |//head->node1->node2->nod ...

  2. 【LeetCode】剑指 Offer 18. 删除链表的节点

    [LeetCode]剑指 Offer 18. 删除链表的节点 文章目录 [LeetCode]剑指 Offer 18. 删除链表的节点 一.双指针 一.双指针 本题删除值为 val 的结点需分为两步: ...

  3. 剑指 Offer 35. 复杂链表的复制

    剑指 Offer 35. 复杂链表的复制 题目 题目链接 解题思路 题目理解 解题思路 具体代码 题目 题目链接 https://leetcode-cn.com/problems/fu-za-lian ...

  4. 《LeetCode力扣练习》剑指 Offer 24. 反转链表 Java

    <LeetCode力扣练习>剑指 Offer 24. 反转链表 Java 一.资源 题目: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1-& ...

  5. 剑指Offer:反转链表【24】

    剑指Offer:反转链表[24] 题目描述 输入一个链表,反转链表后,输出新链表的表头. 解题分析 这道题我才发现我是属于那种真的笨,图都画出来了流程写不出来.看了别人的代码,总觉得自己差一步. 这也 ...

  6. 【LeetCode】剑指 Offer 35. 复杂链表的复制

    [LeetCode]剑指 Offer 35. 复杂链表的复制 文章目录 [LeetCode]剑指 Offer 35. 复杂链表的复制 package offer;import java.util.Ar ...

  7. 【LeetCode】剑指 Offer 24. 反转链表

    剑指 Offer 24. 反转链表 文章目录 剑指 Offer 24. 反转链表 一.迭代 二.递归 总结 一.迭代 在遍历链表时,将当前节点的 next 指针改为指向前一个结点.由于结点没有引用其前 ...

  8. 【算法】剑指 Offer 18. 删除链表的节点

    1.概述 剑指 Offer 18. 删除链表的节点 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: he ...

  9. 剑指offer——面试题21:包含min函数的栈

    剑指offer--面试题21:包含min函数的栈 Solution1: 辅助栈! 逻辑上要想清楚..但是用栈结构来实现栈,目的不知为何... class Solution { public:void ...

最新文章

  1. Java中关于==和equal的区别 以及equals()方法重写
  2. python树莓派串口通信实例_Python实现树莓派USB串口通讯及云端对接
  3. wxWidgets:wxGenericDirCtrl类用法
  4. 数据库可以存php代码,php把数组保存数据库程序代码
  5. python安装anaconda ubuntu_Ubuntu 16.4 安装anaconda 详细教程
  6. Java开发工具插件配置记录
  7. UE4 虚幻引擎,3D数学(一),3D坐标系,2D坐标系
  8. 计算机和材料成型及控制工程,材料成型及控制工程专业属于什么门类
  9. 江苏省计算机二级python往年卷_历年江苏省计算机二级考试真题及答案2008-2009
  10. 水星怎么设置网速最快_水星无线路由器怎么设置网速限制【设置方法】
  11. 红帽8LINUX命令行使用技巧
  12. Eclipse/Myeclipse自定义JSP模板
  13. excel不显示提示对话框
  14. 复现ReDet RTX 3090 pytorch1.8.1
  15. 8款炫酷的HTML5特效源码
  16. 黑群晖从入门到入土,自编译适合自己硬件的黑群晖7.1.x引导(黑群晖DSM7.X引导用arpl编译教程)
  17. IPv4与IPv6区别
  18. synergy使用方法和安装包
  19. 实现单点登录(伪登录)
  20. 2022卡塔尔世界杯感想

热门文章

  1. Dotnet 6.0 深度探索(一)
  2. .NET 6新特性试用 | 自动生成高性能日志记录代码
  3. Visual Studio 2022 Preview 3和2019 16.11发布
  4. 多语言应用开发中本地化信息对照表
  5. 构建属于你自己的dapr服务发现
  6. Azure Cosmos Db 介绍及演示
  7. 【LeetCode之C#解法】 移动零、爬楼梯
  8. 可能是Asp.net Core On host、 docker、kubernetes(K8s) 配置读取的最佳实践
  9. 旧 WCF 项目迁移到 asp.net core + gRPC 的尝试
  10. 将终结点图添加到你的ASP.NET Core应用程序中