zoukankan      html  css  js  c++  java
  • 判断单向链表是否为环形链表-基于Go

    给定一个链表,判断链表中是否有环。
    如果链表中存在某个节点,可以通过连续跟踪next指针再次到达该节点,则链表中存在环。
    如果链表中存在环,则返回true,否则返回false。

    • 直接遍历链表,使用set做标记位(标记是否已经到达过)
    package main
    
    import (
    	"fmt"
    )
    
    type Node struct{
    	val int
    	next *Node
    }
    type void struct{}
    
    func hasCycle(head *Node)bool{
    	set := map[Node]void{}
    	for head!=nil{
    		_, ok := set[*head]
    		if ok{
    			// 已经存在了一个相同的Node
    			return true
    		}
    		// 此Node在set中不存在
    		set[*head] = void{}
    		head = head.next
    	}
    	return false
    }
    
    func main(){
    	node5 := Node{5, nil}
    	node4 := Node{4, &node5}
    	node3 := Node{3, &node4}
    	node2 := Node{2, &node3}
    	node1 := Node{1, &node2}
    	node5.next = &node3
    	fmt.Println(hasCycle(&node1))
    }
    
    • 使用双指针
    func hasCycle(head *ListNode) bool {
        if head==nil||head.Next==nil{
    		return false
        }
    
    	slow := head
    	quick := head
    	for quick!=nil && quick.Next!=nil{
                    slow = slow.Next
    		quick = quick.Next.Next
    
    		if quick==slow{
    			return true
    		}	     
    	}
    
    	return false
    }
    
  • 相关阅读:
    流量分析 (WireShark)
    WEB小技俩
    PHP伪协议
    php弱类型基础
    宽字节注入
    布尔盲注
    时间盲注
    Odoo13教程-Odoo快捷键使用_江苏欧度软件
    Odoo,快速上手Odoo,来了解Odoo几个标准模块
    开源Odoo13更新的模块功能信息(译文)
  • 原文地址:https://www.cnblogs.com/pangqianjin/p/14629922.html
Copyright © 2011-2022 走看看