写在前面
今天还说难度简单系列题目继续,《环形链表》,从题目一听就是关于链表的一道题,上一题刚送走了一个二叉树数据结构,这次又来了一个链表题目。
大家可以在这道题里面体会体会链表的一些特性和如何处理链表。
题目解读
从这道题目上来看,我们主要就是要了解链表的基础知识,比如从题目示例上来看,链表是一个首尾可能都会存在链表元素的数据结构。
而且可以存在环形相连的情况,当然这在日常开发中不经常遇到,因为一旦遇到一般都是报错了。
再者就是如何判断一个链表对象是否存在环形结构。
这里一般最暴力的手法就是通过循环遍历,然后通过去重集合或者别的什么,将已经遍历过的元素对象存储下来。
在每次遍历之前先判断是否已经存在对象,如果存在的话,自然也就是存在环形结构的链表了。
代码实现
本次运行的代码如下,此次使用的方法就是通过循环来获取链表的每一个对象值,然后通过Set来存储判断是否存在,效率较差。
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public boolean hasCycle(ListNode head) { Set<ListNode> set = new HashSet<>(); while (head != null) { if (!set.add(head)) { return true; } head = head.next; } return false; } }
执行结果
通过Set来存储ListNode对象,是一个不智之举,但是是一个快速的方法,这思路实现起来非常简单,就是效率不咋地。
其他思路
暂无,大家有什么想法可以评论区见。
总结
相信关于链表,还是要通过递归、或者循环来解决部分问题的,因为要逐渐递进到最后一个元素才行,所以你搞清了吗?