提示:刷左神视频有感,B站视频链接:https://www.bilibili.com/video/BV13g41157hK
前言
针对单链表的操作,算法题主要考核重点是如何做得最优空间复杂度。
链表主要知识点:
1、遍历链表,用哈希表(或数组)记录全部值;
2、快慢指针。
一、判断单链表是否有环,及入环节点
代码如下:
type Node struct {
Val int32
Next *Node
}
// JudgeLoop 判断该链表是否有环,如果有环,返回入环节点
func (n *Node) JudgeLoop() (bool, *Node) {
if n == nil || n.Next == nil {
return false, nil
}
slowNode := n.Next
quickNode := n.Next.Next
for slowNode != quickNode {
if quickNode == nil || quickNode.Next == nil {
return false, nil
}
slowNode = slowNode.Next
quickNode = quickNode.Next.Next
}
slowNode = n
for slowNode != quickNode {
slowNode = slowNode.Next
quickNode = quickNode.Next
}
return true, slowNode
}
二、TODO
// todo,后续碰到链表算法题再行补充