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

相关推荐
wanghu20242 分钟前
ABC460_E题题解
c++·算法
z200509303 分钟前
今日算法(回溯子集)
数据结构·算法·leetcode
devilnumber3 分钟前
java自定义事件处理器极简版:「外卖点餐」场景
java·开发语言
Hesionberger6 分钟前
巧用异或找出唯一数字(多解)
java·数据结构·python·算法·leetcode
小何code8 分钟前
C语言【初阶】第1节,初识C语言
c语言·开发语言
代码小书生11 分钟前
getpass,一个安全输入的 Python 库!
开发语言·python·安全
莫陌尛.17 分钟前
Fuzzy C-Mean Clustering (FCM)
c语言·开发语言
YOU OU17 分钟前
案例综合练习-博客系统
java·开发语言
变量未定义~18 分钟前
阶乘的约数和、斐波那契数列、数列区间最大值(ST表)
数据结构·算法
其实防守也摸鱼19 分钟前
告别单个变量,用列表和字典批量管理你的 Python 数据
开发语言·网络·软件测试·python·web安全·数据结构,编程教程