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

相关推荐
暗影~行星3 分钟前
C语言,原码、补码、反码
c语言·开发语言
写个博客13 分钟前
代码随想录算法训练营第十五天
算法
晨曦54321020 分钟前
python——正则表达式
开发语言·正则表达式
铃煦27 分钟前
《算法笔记》3.3小节——入门模拟->图形输出
笔记·算法·图论
LuckyLay31 分钟前
LeetCode算法题(Go语言实现)_39
算法·leetcode·golang
uhakadotcom38 分钟前
NVIDIA Resiliency Extension(NVRx)简介:提高AI模型训练的容错能力
算法·面试
Tisfy38 分钟前
LeetCode 2843.统计对称整数的数目:字符串数字转换
算法·leetcode·字符串·题解
极客先躯41 分钟前
高级java每日一道面试题-2025年4月01日-微服务篇[Nacos篇]-Nacos集群的数据一致性是如何保证的?
java·开发语言·微服务
二块烧肉1 小时前
C语言 内存管理
c语言·开发语言
Yyq130208696821 小时前
KTH5772 系列游戏手柄摇杆专用3D 霍尔位置传感器
算法·游戏·3d·小杨13020869682