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

相关推荐
星辰_mya4 分钟前
PV之系统与并发的核心wu器
java·开发语言·后端·学习·面试·架构师
做时间的朋友。23 分钟前
Java虚拟线程详解:从原理到实战,解锁百万并发新姿势
java·开发语言
一只大袋鼠24 分钟前
MyBatis 从入门到实战(二):代理 Dao 开发与多表关联查询
java·开发语言·数据库·mysql·mybatis
明月醉窗台25 分钟前
Python-opencv批量处理文件夹中图像操作
开发语言·python·opencv
周末也要写八哥28 分钟前
C++实际开发之泛型编程(模版编程)
java·开发语言·c++
好家伙VCC29 分钟前
**发散创新:用 Rust实现游戏日引擎核心模块——从事件驱动到多线程调度的实战
java·开发语言·python·游戏·rust
Dxy123931021640 分钟前
Python在图片上画圆形:从入门到实战
开发语言·python
北漂Zachary1 小时前
四大编程语言终极对决:汇编/C#/Go/Java谁更强
汇编·golang·c#
桌面运维家1 小时前
IDV云桌面vDisk机房部署方案模板特性解析
java·开发语言·devops
CS_Zero1 小时前
无人机路径规划算法——EGO-planner建模总结—— EGO-planner 论文笔记(一)
论文阅读·算法·无人机