找出该链表的环的入口结点。

链表中环的入口结点

http://www.nowcoder.com/questionTerminal/253d2c59ec3e4bc68da16833f79a38e4

import java.util.ArrayList;
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}

考察知识点:闭环,哈希法,双指针法
思路:1、用list存放节点,第一个重复的即为所求。
2、快慢指针,先找第一个在环中相遇的点,然后让快慢指针步长都为1,开始走,再次相遇的点即为所求。
*/
public class Solution {

//哈希法
public ListNode EntryNodeOfLoop(ListNode pHead){
    if(pHead==null || pHead.next==null) return null;
    ArrayList<ListNode> list=new ArrayList<>();
    ListNode temp=pHead;
    while(!list.contains(temp)){
        list.add(temp);
        temp=temp.next;
    }
    return temp;
}

//双指针法
public ListNode EntryNodeOfLoop(ListNode pHead){
    if(pHead==null || pHead.next==null) return null;
    ListNode fast=pHead;
    ListNode slow=pHead;
    while(fast!=null && fast.next!=null){
        fast=fast.next.next;
        slow=slow.next;
        if(fast==slow){
            fast=pHead;
            while(fast!=slow){
                fast=fast.next;
                slow=slow.next;
            }
            return slow;
        }
    }
    return null;
}

}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务