剑指offer >> 链表中环的入口结点

本文介绍了一种高效算法,用于在链表中查找环的入口节点。通过使用快慢指针策略,首先判断链表是否存在环,再利用数学原理找到环的起点,避免了传统方法的高复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。

思路:

  • 先是判断环是否存在
    我们可以想象这样一个场景,当两个同学同时在操场的同一起点赛跑,如果其中一位同学跑的足够快,将另外一个同学套圈了,他们是不是就相遇了,因为他们在一个操场()里。同样地,我们设置两个指针,一个走得慢一个走得快(一个一次走一步另一个一次走两步),如果链表内存在环,他们就一定会相遇的!

  • 找到环的入口处
    在确定链表有环之后,我们寻找环的入口点。我们知道套圈其实就是快的人超过了慢的人一圈了,那么题中的一圈其实就是那个。假设慢的指针走了x步,快的就走了2x步,那么就是2x-x=n,即x=n。也就是慢的指针其实走了一个环的长度(环包含的节点数),此时让快的指针回到头结点,再次让快的指针和慢的指针同时出发但这次是一人走一步,那么他们一定会在入口处相遇(见下图)。
    在这里插入图片描述
    代码如下:

    public static ListNode EntryNodeOfLoop(ListNode pHead)
    {
        ListNode finalNode = null;
        if(pHead == null)
        	return finalNode;
        ListNode slower = pHead;   // 一个慢的指针
        ListNode faster = pHead;   // 一个快的指针
        while(slower.next != null && faster.next.next != null){
        	slower = slower.next;
        	faster = faster.next.next;
        	if(faster == slower){
        		faster = pHead;
        		while(faster != slower){
        			slower = slower.next;
        			faster = faster.next;
        		}
        		if(faster == slower){
        			finalNode = slower;
        			break;
        		}
        	}
        }
    	return finalNode;
    }
内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合群:从事环境科学研究的学者、政府环保部门工作员、能源政策制定者、关注农村能源转型的社会士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值