当前位置: 首页 > news >正文

天空建筑网站哈尔滨百度关键词优化

天空建筑网站,哈尔滨百度关键词优化,360的网站怎么做,wordpress 知更鸟 公告142.环形链表 II 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测…

142.环形链表 II

        给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null

        如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

不允许修改 链表。

示例 1:

输入:head = [3,2,0,-4], pos = 1

输出:返回索引为 1 的链表节点 解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

输入:head = [1,2], pos = 0

输出:返回索引为 0 的链表节点 解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

输入:head = [1], pos = -1

输出:返回 null 解释:链表中没有环。


判断是否有环


算法思想:经典的快慢指针问题,设置快慢指针,slow 和 fast 初始时都指向链表的头结点 head,然后慢指针每次走一步,快指针每次走两步,这样快指针一定比慢指针先入环,经过不断的走下去,若是链表有环,快慢指针必会在环上相遇

#include<iostream>
#include<math.h>
using namespace std;
struct ListNode {int val;ListNode* next;ListNode() : val(0), next(nullptr) {}ListNode(int x) : val(x), next(nullptr) {}ListNode(int x, ListNode* next) : val(x), next(next) {}};bool hasCycle(ListNode* head) {if (head == nullptr || head->next == nullptr) return false;	// 链表没有元素或者只有一个元素ListNode* fast = head;ListNode* slow = head;while (fast != nullptr && fast->next != nullptr) {slow = slow->next;fast = fast->next->next;if (slow == fast) return true;}return false;}

判断入环口


        判断链表的入环口相当于判断两长度不一的链表的公共结点初始位置(长的先走两链表的差值,然后一起走),按道理我们应该让长的链表先走(假设长链表是初始链表,短链表是从环开始的链表),由于链表有环我们无法准确的知道链表的长度,那么如何判断入环口呢?

        首先我们应该知道,在 slow 入环的时候,fast 早已入环,那么 slow 和 fast 之间的距离必定小于环长,所以当 fast 和 slow 相遇的时候,slow 在环内走的距离一定小于环长。

        我们假设头结点距离入环口的长度为 a ,fast 和 slow 相遇的位置距离入环口 x ,环的长度为 r .那么由上图可知 slow 走的距离是 a+x,而由于相遇之前 fast 可能已经绕环 n 圈,那么 fast 所走的距离是 a + r*n + x,又由于 fast 所走的步长等于 slow 的两倍,所以 2*(a+x) = a + r*n + x => a = r*n - x。

再回到寻找两链表的公共结点,我们已经知道了链表长度的差值 a,又已知链表是有环的,那么不妨设 h1 = head, h2=slow( 相对于h1已经走了 x ),那么 h1 走完 a 到达入环口的时候,h2 已经绕完环 n 圈也到达了入环口,所以 h1 和 h2 相遇的位置便是入环口的位置。

/*142. 环形链表 II
*/#include<iostream>
using namespace std;/* 链表类型 */
typedef struct ListNode {int val;ListNode* next;ListNode() : val(0), next(nullptr) {}ListNode(int x) : val(x), next(nullptr) {}ListNode(int x, ListNode* next) : val(x), next(next) {}};ListNode* detectCycle(ListNode* head) {if (head == nullptr || head->next == nullptr) return nullptr;if (head->next == head) return head;                            // 只有头结点ListNode* fast = head;ListNode* slow = head;while (fast != nullptr && fast->next != nullptr) {slow = slow->next;fast = fast->next->next;if (slow == fast) break;}if (fast == nullptr || fast->next == nullptr) return nullptr;   // 无环ListNode* h1 = head;ListNode* h2 = slow;while (h1 != h2) {h1 = h1->next;h2 = h2->next;}return h1;                                                      // 入环口
}

over!

http://www.hkea.cn/news/1190/

相关文章:

  • 乐清手机网站百度开户返点
  • 动态网站实例益阳网站seo
  • 西安北郊网站建设公司产品宣传方式有哪些
  • 加盟项目优化设计官网
  • 做网站美工工资多少提交百度收录
  • 做网站流量怎么赚钱吗爱站网的关键词是怎么来的
  • 网站导航的建设吉林刷关键词排名优化软件
  • 织梦av女优色流网站模板重庆seo网络推广关键词
  • 红河做网站的公司搜索引擎优化的技巧
  • 好看的登录页面自适应模板推广学院seo教程
  • 大学网站开发与管理知识总结百度百度百度一下
  • 网站建设合同管辖深圳网络营销推广服务
  • 网站icp备案是什么意思网站开发框架
  • 可以免费做宣传的网站正在直播足球比赛
  • wordpress建的大型网站吗许昌正规网站优化公司
  • 鸡西公司做网站地推拉新app推广接单平台
  • 企业网站的做百度竞价推广是什么意思
  • wordpress 火箭哪家公司做seo
  • 免费建设网站是真的吗百度贴吧入口
  • 网站建设服务优势长沙专业seo优化公司
  • php一台电脑做网站国外市场网站推广公司
  • 用dw做的企业网站电子邮件营销
  • 公司网页网站建设 ppt模板下载西安百度推广优化公司
  • 成都专业做网站公司哪家好奇葩网站100个
  • 网站优化外链bt樱桃 磁力岛
  • 查高铁建设进度官方网站营销活动方案模板
  • 驻马店百度seo整站优化案例
  • 深圳市龙岗区建设局官网网站大连网站建设费用
  • 网站安全防护网络推广怎么做好
  • 网站建设问题新闻源软文发布平台