链表
之前手撕过一个链表 → 戳这里
链表成环
思路
借助set集合
(1)依次遍历链表中的节点,判断节点是否存在set集合中
(2)如果节点不存在set中,则将节点添加到set中
(3)如果节点存在set中,直接返回该节点
时间复杂度:O(N)
空间复杂度:O(N)
快慢指针
(1)定义一个快节点fast,每次fast移动两次
(2)定义一个慢节点slow,每次slow移动一次
(3)当快慢指针相遇时,说明链表成环了
时间复杂度:O(N)
空间复杂度:因为没有额外的创建,所以复杂度为 O(1)
练习题目
141. 环形链表
- 借助set集合代码:
public boolean hasCycle(ListNode head) { HashSet<ListNode> set = new HashSet<>(); // 创建一个HashSet用来存储遍历的节点 ListNode index = head; while(index!=null){ // 开始遍历 if(set.contains(index)){ // 如果节点存在set集合中,直接返回 return true; }else{ // 如果节点不存在set集合中,将几点添加到set中,并遍历下一个节点 set.add(index); index = index.next; } } return false; } </



556

被折叠的 条评论
为什么被折叠?



