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转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
一颗松鼠9 分钟前
JavaScript 闭包是什么?简单到看完就理解!
开发语言·前端·javascript·ecmascript
泉崎9 分钟前
11.7比赛总结
数据结构·算法
有梦想的咸鱼_11 分钟前
go实现并发安全hashtable 拉链法
开发语言·golang·哈希算法
你好helloworld11 分钟前
滑动窗口最大值
数据结构·算法·leetcode
海阔天空_201316 分钟前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
天下皆白_唯我独黑23 分钟前
php 使用qrcode制作二维码图片
开发语言·php
夜雨翦春韭27 分钟前
Java中的动态代理
java·开发语言·aop·动态代理
小远yyds29 分钟前
前端Web用户 token 持久化
开发语言·前端·javascript·vue.js
何曾参静谧41 分钟前
「C/C++」C/C++ 之 变量作用域详解
c语言·开发语言·c++