go语言每日一练——链表篇(六)

传送门

牛客面试必刷101题—— 判断链表中是否有环
牛客面试必刷101题—— 链表中环的入口结点

题目及解析

题目一

在这里插入图片描述

代码

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
}

题目二

在这里插入图片描述

代码

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

相关推荐

  1. SQL语句每日

    2024-02-06 22:20:03       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-06 22:20:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-06 22:20:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-06 22:20:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-06 22:20:03       18 阅读

热门阅读

  1. FastAdmin

    2024-02-06 22:20:03       36 阅读
  2. H12-821_315

    2024-02-06 22:20:03       29 阅读
  3. 数组对象过滤

    2024-02-06 22:20:03       32 阅读
  4. k8s的Deployment部署策略线上踩坑

    2024-02-06 22:20:03       26 阅读
  5. 算法.1-三大排序算法-对数器-二分

    2024-02-06 22:20:03       27 阅读
  6. 软件系统架构的演变历史介绍

    2024-02-06 22:20:03       30 阅读
  7. OpenHarmony开源鸿蒙开发之旅

    2024-02-06 22:20:03       33 阅读
  8. 系统架构设计师-21年-上午答案

    2024-02-06 22:20:03       28 阅读
  9. Droppy教程 | 轻量文件共享

    2024-02-06 22:20:03       35 阅读
  10. 【国产MCU】-CH32V307-模拟/数字转换器(ADC)

    2024-02-06 22:20:03       29 阅读
  11. centos找不到新建的硬盘信息

    2024-02-06 22:20:03       33 阅读