题目描述:
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
思路:
思路1:设置快慢指针,刚开始快慢指针同时指向某一个节点,然后进行next,当快慢指针再次相遇的时候,说明该链表有环。
思路2:使用HashSet存储节点,遍历将节点加入hashSet,如果存在环,那么入口节点就是那个在HashSet里第一个重复的节点。下面是思路2的代码。(思路1的代码leetcode刷题列表里有)
代码:
package offer01;
import java.util.HashMap;
import java.util.HashSet;
public class TestNo55 {
static class ListNode{
int val;
ListNode next;
ListNode(int val){
this.val = val;
}
}
public static void main(String[] args) {
ListNode node = new ListNode(0);
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(3);
ListNode node3 = new ListNode(4);
node.next = node1;
node1.next = node2;
node2.next = node3;
node3.next = node;
System.out.println(new TestNo55().EntryNodeOfLoop(node).val);
}
public ListNode EntryNodeOfLoop(ListNode pHead)
{
HashSet<ListNode> set = new HashSet<>();
while (pHead != null){
if(set.contains(pHead)){
return pHead;
}
set.add(pHead);
pHead = pHead.next;
}
return null;
}
}
天越黑,星星越亮 ..
来源:CSDN
作者:胡别致
链接:https://blog.csdn.net/qq_40664693/article/details/104580587