给定一个链表,返回链表开始入环的第一个节点。
如果链表无环,则返回 null
。
说明:
不允许修改给定的链表。
进阶:
你是否可以不用额外空间解决此题?
题目分析:
一、使用额外的空间处理
即使用HashMap,遍历链表并将节点存储在HashMap中,如果出现重复的节点,则就是环形链表的入环节点,返回。
代码实现:
public static class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } //使用额外的空间---HashMap public ListNode detectCycle(ListNode head) { HashMap<ListNode,Integer> map = new HashMap<>(); if (head == null || head.next == null) return null; while (head != null) { if (map.containsKey(head) == false) { map.put(head,1); head = head.next; } else return head; } return null; }
主函数:
public static void main(String[] args) { L9 l = new L9(); ListNode node = new ListNode(1); node.next = new ListNode(2); node.next.next = new ListNode(3); node.next.next.next = node.next; ListNode res = l.detectCycle(node); System.out.println(res.val); }
运行结果:
2