title: leetcode-142-环形链表II(java|python)
date: 2019-09-27 12:37:37
categories:
- leetcode
tags: - leetcode
leetcode-142-环形链表II(java|python)
-
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
说明:不允许修改给定的链表。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/linked-list-cycle-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 -
解法一:hashMap
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode detectCycle(ListNode head) { HashSet<ListNode> set = new HashSet<ListNode>(); while(head!=null){ if(set.contains(head)) return head; else set.add(head); head = head.next; } return null; }
-
解法2:
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode detectCycle(ListNode head) { ListNode hasCycle = has(head); if(hasCycle != null){ ListNode L1 = head; while(L1!=hasCycle){ L1 = L1.next; hasCycle = hasCycle.next; } return hasCycle; }else return null; } public ListNode has(ListNode head){ if (head == null) return null; ListNode fast = head; ListNode slow = head; while (fast != null && fast.next != null) { slow = slow.next; fast = fast.next.next; if (fast == slow) return slow; } return null; } }