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

相关推荐
彧azz2 小时前
图的存储结构详解:邻接矩阵的原理、实现与应用
开发语言·数据结构·学习·php
平头哥AI2 小时前
Day 22 _ 包装错误别丢链_%w、errors.Is 与 errors.As
android·服务器·学习·golang·go
老王熬夜敲代码2 小时前
BLAKE3:最快的密码学哈希函数
算法·密码学·哈希算法
hansang_IR2 小时前
【题解】P4460 [CQOI2018] 解锁屏幕
c++·算法
嵌入式学习菌2 小时前
Modbus‑RTU 数据类型分析
开发语言·单片机·bug
见闻小天地2 小时前
简博斯JG-C系列彩色激光同轴位移计:摄像头模组对位与行程测量的技术价值观察
人工智能·算法
matlab代码3 小时前
基于matlab数字图像处理的指纹识别系统【源码68期】
开发语言·matlab
葫三生3 小时前
《论三生原理》神话学构想与“神话历史”理论、《古史中的神话》思路异同?
大数据·人工智能·科技·深度学习·算法
matlab代码3 小时前
基于matlab的水果识别系统(苹果香蕉菠萝梨桃子)【源码65期】
开发语言·matlab
liliangcsdn4 小时前
因子分析指标概念与示例
算法·机器学习