142:环形链表 II

This commit is contained in:
huangge1199 2021-06-07 10:36:27 +08:00
parent 260b803e04
commit d0f4efa343
2 changed files with 153 additions and 0 deletions

View File

@ -0,0 +1,99 @@
//给定一个链表返回链表开始入环的第一个节点 如果链表无环则返回 null
//
// 为了表示给定链表中的环我们使用整数 pos 来表示链表尾连接到链表中的位置索引从 0 开始 如果 pos -1则在该链表中没有环注意po
//s 仅仅是用于标识环的情况并不会作为参数传递到函数中
//
// 说明不允许修改给定的链表
//
// 进阶
//
//
// 你是否可以使用 O(1) 空间解决此题
//
//
//
//
// 示例 1
//
//
//
//
//输入head = [3,2,0,-4], pos = 1
//输出返回索引为 1 的链表节点
//解释链表中有一个环其尾部连接到第二个节点
//
//
// 示例 2
//
//
//
//
//输入head = [1,2], pos = 0
//输出返回索引为 0 的链表节点
//解释链表中有一个环其尾部连接到第一个节点
//
//
// 示例 3
//
//
//
//
//输入head = [1], pos = -1
//输出返回 null
//解释链表中没有环
//
//
//
//
// 提示
//
//
// 链表中节点的数目范围在范围 [0, 104]
// -105 <= Node.val <= 105
// pos 的值为 -1 或者链表中的一个有效索引
//
// Related Topics 链表 双指针
// 👍 1023 👎 0
package leetcode.editor.cn;
import com.code.leet.entiy.ListNode;
import java.util.HashSet;
import java.util.Set;
//142:环形链表 II
public class LinkedListCycleIi{
public static void main(String[] args) {
//测试代码
Solution solution = new LinkedListCycleIi().new Solution();
}
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
/**
* 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) {
Set<ListNode> set = new HashSet<>();
while (head != null) {
if (!set.add(head)) {
return head;
} else {
head = head.next;
}
}
return null;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}

View File

@ -0,0 +1,54 @@
<p>给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 <code>null</code></p>
<p>为了表示给定链表中的环,我们使用整数 <code>pos</code> 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 <code>pos</code><code>-1</code>,则在该链表中没有环。<strong>注意,<code>pos</code> 仅仅是用于标识环的情况,并不会作为参数传递到函数中。</strong></p>
<p><strong>说明:</strong>不允许修改给定的链表。</p>
<p><strong>进阶:</strong></p>
<ul>
<li>你是否可以使用 <code>O(1)</code> 空间解决此题?</li>
</ul>
<p> </p>
<p><strong>示例 1</strong></p>
<p><img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/12/07/circularlinkedlist.png" style="height: 97px; width: 300px;" /></p>
<pre>
<strong>输入:</strong>head = [3,2,0,-4], pos = 1
<strong>输出:</strong>返回索引为 1 的链表节点
<strong>解释:</strong>链表中有一个环,其尾部连接到第二个节点。
</pre>
<p><strong>示例 2</strong></p>
<p><img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/12/07/circularlinkedlist_test2.png" style="height: 74px; width: 141px;" /></p>
<pre>
<strong>输入:</strong>head = [1,2], pos = 0
<strong>输出:</strong>返回索引为 0 的链表节点
<strong>解释:</strong>链表中有一个环,其尾部连接到第一个节点。
</pre>
<p><strong>示例 3</strong></p>
<p><img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/12/07/circularlinkedlist_test3.png" style="height: 45px; width: 45px;" /></p>
<pre>
<strong>输入:</strong>head = [1], pos = -1
<strong>输出:</strong>返回 null
<strong>解释:</strong>链表中没有环。
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li>链表中节点的数目范围在范围 <code>[0, 10<sup>4</sup>]</code></li>
<li><code>-10<sup>5</sup> <= Node.val <= 10<sup>5</sup></code></li>
<li><code>pos</code> 的值为 <code>-1</code> 或者链表中的一个有效索引</li>
</ul>
<div><div>Related Topics</div><div><li>链表</li><li>双指针</li></div></div>\n<div><li>👍 1023</li><li>👎 0</li></div>