go语言每日一练——链表篇(六)

传送门

牛客面试必刷101题------ 判断链表中是否有环
牛客面试必刷101题------ 链表中环的入口结点

题目及解析

题目一

代码

go 复制代码
package main

import . "nc_tools"

/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 *
 * @param head ListNode类
 * @return bool布尔型
 */
func hasCycle(head *ListNode) bool {
	if head == nil || head.Next == nil {
		return false
	}

	slow := head
	fast := head.Next

	for slow != fast {
		if fast == nil || fast.Next == nil {
			return false
		}
		fast = fast.Next.Next
		slow = slow.Next
	}

	return true
}

题目二

代码

go 复制代码
package main

func EntryNodeOfLoop(head *ListNode) *ListNode {
	slow := head
	fast := head
	for fast != nil && fast.Next != nil {
		slow = slow.Next
		fast = fast.Next.Next
		if slow == fast {
			fast = head
			for slow != fast {
				slow = slow.Next
				fast = fast.Next
			}
			return slow
		}
	}
	return nil
}

总结

今天的解题算法主要使用了双指针这一算法,我们利用定义快慢指针来判断链表中是否有环以及环的节点,这里的理论依据主要是floyd判圈算法,大家有兴趣的化可以看一下文末的文章来理解一下该算法,这里就不做赘述了

拓展

floyd判圈算法

相关推荐
见叶之秋几秒前
【数据结构】时间复杂度和空间复杂度
c语言·数据结构
眼眸流转几秒前
LeetCode热题100(七)
算法·leetcode·c#
WWZZ20251 分钟前
Sim2Sim理论与实践1:坐标系与位姿变换
人工智能·算法·机器人·大模型·具身智能·isaac sim
yong99903 分钟前
动态四足机器人的自由模型预测控制(FMPC)MATLAB实现
算法·matlab·机器人
JavaWeb学起来4 分钟前
Python学习教程(二)字符串
开发语言·python·python基础
wuweijianlove7 分钟前
算法与数据结构协同优化的设计思想的技术6
数据结构
归寻太乙8 分钟前
2026年03月27日—Python基础—Python背景知识与环境搭建
开发语言·python
88号技师8 分钟前
2026年3月新锐一区SCI-傅里叶变换优化算法Fourier transform optimizer-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
小碗羊肉10 分钟前
【从零开始学Java | 第二十一篇】Collection的遍历方式
数据结构
福楠11 分钟前
现代C++ | 右值引用 + std::move + noexcept
linux·c语言·开发语言·c++