算法编程(八):环形链表

简介: 算法编程(八):环形链表

写在前面


今天还说难度简单系列题目继续,《环形链表》,从题目一听就是关于链表的一道题,上一题刚送走了一个二叉树数据结构,这次又来了一个链表题目。

大家可以在这道题里面体会体会链表的一些特性和如何处理链表。

image.png

题目解读


从这道题目上来看,我们主要就是要了解链表的基础知识,比如从题目示例上来看,链表是一个首尾可能都会存在链表元素的数据结构。

而且可以存在环形相连的情况,当然这在日常开发中不经常遇到,因为一旦遇到一般都是报错了。

再者就是如何判断一个链表对象是否存在环形结构。

这里一般最暴力的手法就是通过循环遍历,然后通过去重集合或者别的什么,将已经遍历过的元素对象存储下来。

在每次遍历之前先判断是否已经存在对象,如果存在的话,自然也就是存在环形结构的链表了。

代码实现


本次运行的代码如下,此次使用的方法就是通过循环来获取链表的每一个对象值,然后通过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对象,是一个不智之举,但是是一个快速的方法,这思路实现起来非常简单,就是效率不咋地。

image.png

其他思路


暂无,大家有什么想法可以评论区见。

总结


相信关于链表,还是要通过递归、或者循环来解决部分问题的,因为要逐渐递进到最后一个元素才行,所以你搞清了吗?


相关文章
|
2月前
|
算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
|
3月前
【数据结构OJ题】环形链表
力扣题目——环形链表
33 3
【数据结构OJ题】环形链表
|
3月前
【数据结构OJ题】环形链表II
力扣题目——环形链表II
23 1
【数据结构OJ题】环形链表II
|
2月前
|
算法
【数据结构与算法】共享双向链表
【数据结构与算法】共享双向链表
14 0
|
2月前
|
算法
【数据结构与算法】双向链表
【数据结构与算法】双向链表
13 0
|
2月前
|
算法
【数据结构与算法】循环链表
【数据结构与算法】循环链表
15 0
|
2月前
|
存储 算法
【数据结构与算法】链表
【数据结构与算法】链表
19 0
|
3月前
|
存储 算法 搜索推荐
告别低效编程!Python算法设计与分析中,时间复杂度与空间复杂度的智慧抉择!
【7月更文挑战第22天】在编程中,时间复杂度和空间复杂度是评估算法效率的关键。时间复杂度衡量执行时间随数据量增加的趋势,空间复杂度关注算法所需的内存。在实际应用中,开发者需权衡两者,根据场景选择合适算法,如快速排序(平均O(n log n),最坏O(n^2),空间复杂度O(log n)至O(n))适合大规模数据,而归并排序(稳定O(n log n),空间复杂度O(n))在内存受限或稳定性要求高时更有利。通过优化,如改进基准选择或减少复制,可平衡这两者。理解并智慧地选择算法是提升代码效率的关键。
53 1
|
2月前
|
存储 算法
【C算法】编程初学者入门训练140道(1~20)
【C算法】编程初学者入门训练140道(1~20)
|
2月前
|
算法
【C算法】链表算法
【C算法】链表算法
下一篇
无影云桌面