/*题目
* 链表中包含环,请找出该链表的环的入口节点
* */
/*思路
* 1.使用哈希表,但是空间复杂度为O(n)
* 2.使用快慢指针,slow 一次走一步,fast一次走两步,当两个相遇时,fast指针再重新指向head
* 此时fast一次走一步,slow一次走一步,再次相遇则为入口
* */
方法2的数学原理,见以下链接,讲的比较详细。
https://blog.youkuaiyun.com/bitboss/article/details/51648030
public class offer56 {
class ListNode{
int val;
ListNode next=null;
public ListNode(){ }
public ListNode(int val){
this.val=val;
}
}
public ListNode EntryNodeOfLoop(ListNode pHead){
if (pHead == null || pHead.next == null)
return null;
ListNode slow = pHead;
ListNode fast = pHead;
while (fast != null && fast.next != null){ //注意&&
slow = slow.next; //走一步
fast = fast.next.next; //走两步
if (slow == fast){ //第一次相遇
fast = pHead;
while (fast != slow){
fast = fast.next; //相遇后走一步
slow = slow.next; //相遇后走一步
}
if (slow == fast) //第二次相遇
return slow;
}
}
return null;
}
}
今天下午吃完饭,都有点不想做题了,桌子上趴了一会,打开网易云音乐,听会音乐,爬起来就是干啊!!!
淘到一首歌,听完就是干!!!
Waiting For Love