JZ55 链表中环的入口结点

链表中环的入口结点

题目:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。

思路:这题需要知道a = c,然后head和slow每次走一步,相遇的时候就是第一个入口交点,需要注意应该写head != slow -> next,如果写成head == slow,在两个元素组成的环中就会死循环

 

func EntryNodeOfLoop(pHead *ListNode) *ListNode{
    if pHead == nil{
        return nil
    }

    slow, fast := pHead, pHead

    for fast != nil && fast.Next != nil {
        slow = slow.Next
        fast = fast.Next.Next
        if slow == fast {
            break
        }
    }

    if fast == nil || fast.Next == nil {
        return nil
    }

    p := pHead

    for p != slow  && slow != nil{
        p = p.Next
        slow = slow.Next
    }

    return p
}

  

posted @ 2021-04-10 23:06  zqlucky  阅读(53)  评论(0编辑  收藏  举报