教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang算法-判断链表是否有环

golang算法-判断链表是否有环

发布时间:2021-12-26   编辑:jiaochengji.com
教程集为您提供golang算法-判断链表是否有环等资源,欢迎您收藏本站,我们将为您提供最新的golang算法-判断链表是否有环资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg><h2>前言</h2>

链表有环,体现为:
A->B->C->D->B …

<h2>
分析</h2> <ul><li>需要将遍历过的节点存入map,以址为key,空struct为值</li><li>遍历时,当前节点是否已存在,存在即有环。</li></ul><h2>实现</h2>

链表

<pre><code class="lang-go hljs"><span class="token comment">// 链表的长度,不包过头</span> <span class="token keyword">type</span> Node <span class="token keyword">struct</span> <span class="token punctuation">{</span> Next <span class="token operator">*</span>Node Data <span class="token builtin">int</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> LinkList <span class="token keyword">struct</span> <span class="token punctuation">{</span> Header <span class="token operator">*</span>Node <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">NewLinkList</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">*</span>LinkList <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token operator">&</span>LinkList<span class="token punctuation">{</span> Header<span class="token punctuation">:</span> <span class="token operator">&</span>Node<span class="token punctuation">{</span> Next<span class="token punctuation">:</span> <span class="token boolean">nil</span><span class="token punctuation">,</span> Data<span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>l <span class="token operator">*</span>LinkList<span class="token punctuation">)</span> <span class="token function">HasRing</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token builtin">bool</span><span class="token punctuation">{</span> <span class="token keyword">var</span> trace <span class="token operator">=</span> <span class="token function">make</span><span class="token punctuation">(</span><span class="token keyword">map</span><span class="token punctuation">[</span><span class="token operator">*</span>Node<span class="token punctuation">]</span><span class="token keyword">struct</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">var</span> next <span class="token operator">=</span> l<span class="token punctuation">.</span>Header<span class="token punctuation">.</span>Next <span class="token keyword">for</span> next <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> trace<span class="token punctuation">[</span>next<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">struct</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">{</span><span class="token punctuation">}</span> next <span class="token operator">=</span> next<span class="token punctuation">.</span>Next <span class="token keyword">if</span> <span class="token boolean">_</span><span class="token punctuation">,</span> ok <span class="token operator">:=</span> trace<span class="token punctuation">[</span>next<span class="token punctuation">]</span><span class="token punctuation">;</span> ok <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token boolean">false</span> <span class="token punctuation">}</span> <span class="token comment">// 判断链表是否有环</span> <span class="token comment">// 输出true</span> <span class="token keyword">func</span> <span class="token function">TestLinkHasRing</span><span class="token punctuation">(</span>t <span class="token operator">*</span>testing<span class="token punctuation">.</span>T<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> node1 <span class="token operator">=</span> <span class="token operator">&</span>Node<span class="token punctuation">{</span><span class="token boolean">nil</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">}</span> <span class="token keyword">var</span> node2 <span class="token operator">=</span> <span class="token operator">&</span>Node<span class="token punctuation">{</span><span class="token boolean">nil</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">}</span> <span class="token keyword">var</span> node3 <span class="token operator">=</span> <span class="token operator">&</span>Node<span class="token punctuation">{</span><span class="token boolean">nil</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">}</span> <span class="token keyword">var</span> node4 <span class="token operator">=</span> <span class="token operator">&</span>Node<span class="token punctuation">{</span><span class="token boolean">nil</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">}</span> <span class="token keyword">var</span> node5 <span class="token operator">=</span> <span class="token operator">&</span>Node<span class="token punctuation">{</span><span class="token boolean">nil</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">}</span> l <span class="token operator">:=</span> <span class="token function">NewLinkList</span><span class="token punctuation">(</span><span class="token punctuation">)</span> l<span class="token punctuation">.</span><span class="token function">Insert</span><span class="token punctuation">(</span>node1<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Insert</span><span class="token punctuation">(</span>node2<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Insert</span><span class="token punctuation">(</span>node3<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Insert</span><span class="token punctuation">(</span>node4<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Insert</span><span class="token punctuation">(</span>node5<span class="token punctuation">)</span> node5<span class="token punctuation">.</span>Next <span class="token operator">=</span> node2 fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>l<span class="token punctuation">.</span><span class="token function">HasRing</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre> 到此这篇关于“golang算法-判断链表是否有环”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
数据结构和算法(Golang实现)(7)简单入门Golang-标准库
DAY2 GOLANG(二)运算符和程序流程控制
数据结构和算法(Golang实现)(1)简单入门Golang-前言
go语言类型断言
golang判断key是否在map中
go语言的map结构delete方法源码解读
golang map 判断key是否存在
js判断输入是否为中文的函数
MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建
golang sdk后端怎么用_Golang资深后端工程师需要了解的知识点

[关闭]
~ ~