单链表(golang)

本文探讨了如何判断单链表中是否存在环,并找出入环节点。通过使用快慢指针的方法,当快指针追上慢指针时即可确定存在环。代码实现中,首先检查链表是否为空,然后设置快慢指针,快指针每次前进两步,慢指针前进一步,直到两者相遇。之后,从头节点开始,再次使用慢指针找到环的入口节点。
摘要由CSDN通过智能技术生成

提示:刷左神视频有感,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,后续碰到链表算法题再行补充

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值