力扣142. 环形链表 II

文章目录

  • 力扣142. 环形链表 II
  • 示例
  • 代码实现
  • 总结收获

力扣142. 环形链表 II

给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
不允许修改 链表。

示例

力扣142. 环形链表 II_第1张图片
力扣142. 环形链表 II_第2张图片
力扣142. 环形链表 II_第3张图片
力扣142. 环形链表 II_第4张图片

代码实现

/**
 * 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 cur=head;
        Set<ListNode> set=new HashSet<ListNode>();
        while(cur!=null){
            if(set.contains(cur)){
                return cur;
            }else{
                set.add(cur);
            }
            cur=cur.next;
        }
        return null;
    }
}

总结收获

很多如果只涉及链表中值val规律的,例如判断是否是回文链表、是否有环以及找到环链表尾节点指向的链表索引位置等等,都可以通过哈希表方便的做出来。

你可能感兴趣的:(数据结构与算法,leetcode,链表,算法)