PHP和Go如何进行环路链表检测

发布时间:2021-07-28 19:09:35 作者:chen
来源:亿速云 阅读:133

本篇内容介绍了“PHP和Go如何进行环路链表检测”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。 有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路。

解题思路 1

遍历链表,同时将每次的结果放到 map 中,如果有元素重复出现,则是有环形链表。

/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int * Next *ListNode
* }
*/
func detectCycle(head *ListNode) *ListNode {
    visited := make(map[*ListNode]struct{}, 1)
    work := head
    for work != nil {
        _, ok := visited[work]
        if ok {
            return work
        } else {
           visited[work] = struct{}{}
        }
        work = work.Next
    }
return nil}

解题思路 2

快慢指针求解:我们定义两个指针,一快一满。慢指针每次只移动一步,而快指针每次移动两步。初始时,慢指针在位置 head,而快指针在位置 head.next。这样一来,如果在移动的过程中,快指针反过来追上慢指针,就说明该链表为环形链表。否则快指针将到达链表尾部,该链表不为环形链表。

/**
* Definition for a singly-linked list.
* class ListNode {
* public $val = 0;
* public $next = null;
* function __construct($val) { $this->val = $val; }
* }
*/class Solution {
    /**
    * @param ListNode $head * @return Boolean
    */
    function hasCycle($head) {
        $fast = $head;
        $slow = $head;
        while ($fast != null && $fast->next != null) {
            $fast = $fast->next->next;
            $slow = $slow->next;
            if ($fast === $slow) {
                return true;
            }
        }
        return false;
}}

“PHP和Go如何进行环路链表检测”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读:
  1. 如何区分广播风暴和网络环路?
  2. Go36-8,9-链表、字典

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php go

上一篇:如何解决Spring或SpringBoot开启事务以后无法返回自增主键的问题

下一篇:Centos7中MySQL数据库怎么使用mysqldump进行每日自动备份的编写

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》