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判圈算法

相关推荐
2501_944521591 分钟前
Flutter for OpenHarmony 微动漫App实战:主题配置实现
android·开发语言·前端·javascript·flutter·ecmascript
kk”1 分钟前
C++智能指针
开发语言·c++
MX_93593 分钟前
以配置非自定义bean来演示bean的实例化方式
java·开发语言·后端
Piar1231sdafa6 分钟前
【目标检测】竹林与杂草识别_YOLOv26改进算法研究
算法·yolo·目标检测
风筝在晴天搁浅10 分钟前
hot100 543.二叉树的直径
算法·深度优先
风筝在晴天搁浅12 分钟前
hot100 102.二叉树的层序遍历
java·算法
张祥64228890416 分钟前
误差理论与测量平差基础笔记八
笔记·算法·机器学习
进击的小头16 分钟前
传递函数与系统特性(核心数学工具)
python·算法·数学建模
清酒难咽16 分钟前
算法案例之回溯法
c++·经验分享·算法
程序员-King.16 分钟前
day168—递归—二叉树的最大路径和(LeetCode-124)
算法·leetcode·深度优先·递归