https://oj.leetcode.com/problems/linked-list-cycle-ii/
我觉得这个题目很多地方都没有说清楚,首先是环,并不说总的是个环,而是说可能有一部分是环,而多余出来一个单链表。也有可能是单链表的形式。
我提交了好多次,才明白题目的要求。
public ListNode detectCycle(ListNode head) {
if(head == null)return null;
ListNode head1,head2=null,head3,head4;
HashMap<ListNode, ListNode> hashmap = new HashMap<>();
hashmap.put(head, head);
head1 = head.next;
while(head1!=null){
head2 = hashmap.get(head1);
if(head2 == head1)break;
hashmap.put(head1, head1);
head1 = head1.next;
}
if(head2 == head1)
head = head1;
if(head1 == null)return null;
head1 = head;
while(head1!=head){
head2=head1.next;
while(head2!=head&&head2.val!=head1.val)head2 = head2.next;
if(head2!=head&&head1.val==head2.val){
head3 = head1.next;
head4 = head2.next;
while(head3!=head2&&head3.val==head4.val){
head3 = head3.next;
head4 = head4.next;
}
if(head2==head3){
return head1;
}
}
head1 = head1.next;
}
return head;
}