思路1
将节点依次放进set中,第一个放不进去的节点就是相遇节点
思路2
1、设置一个快指针,每次走两步;一个慢指针,每次走一步;
2、如果快指针遇到null,那就说明没环
3、等到快指针和慢指针相遇,快指针指向头节点
4、这次快指针一次走一步,直到相遇
代码
public ListNode detectCycle(ListNode head) {
ListNode quickCur = head;
ListNode lessCur = head;
do {
if (quickCur!=null && quickCur.next != null ) {
quickCur = quickCur.next.next;
lessCur = lessCur.next;
} else {
return null;
}
} while (quickCur != lessCur);
quickCur = head;
while(quickCur != lessCur){
quickCur = quickCur.next;
lessCur = lessCur.next;
}
return quickCur;
}