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

个人网站可以直接做微信登陆吗WordPress中的传媒主题

个人网站可以直接做微信登陆吗,WordPress中的传媒主题,在国外做黄皮网站违法么,邢台企业网站建设链表解题技巧 额外的数据结构(哈希表);快慢指针;虚拟头节点; 找到两个链表相交的第一个节点 给定两个链表,这两个链表可能有环,可能无环。判断这两个链表是否相交,相交则返回第一…

链表解题技巧

  • 额外的数据结构(哈希表);
  • 快慢指针;
  • 虚拟头节点;

找到两个链表相交的第一个节点

给定两个链表,这两个链表可能有环,可能无环。判断这两个链表是否相交,相交则返回第一个相交的节点,不相交则返回nullptr。

首先,需要判断两个链表是否有环,有环的话入环节点的位置在哪?

然后,分情况判断两个链表是否相交:

  • 两个无环链表:对于两个无环链表;
  • 一个有环一个无环:不可能相交
  • 两个有环链表:入环点相同(一定相交)、入环点不相同;
ListNode* LinkedList::findFirstIntersection(ListNode *head1, ListNode *head2) {if (head1 == nullptr || head2 == nullptr) {return nullptr;}// has cycleListNode *loop1 = hasCycle(head1);ListNode *loop2 = hasCycle(head2);// if (loop1 == nullptr && loop2 == nullptr) return findFirstIntersectionWithNoLoop(head1, head2);if (loop1 != nullptr && loop2 != nullptr) return findFirstIntersectionWithLoops(head1, loop1, head2, loop2);return nullptr;
}

链表是否有环

方法1:哈希表(时:O(N),空:O(N))

使用哈希表,在链表遍历过程中,判断该节点是否在哈希表中:

  • 该节点在表中,则说明有环,此时为入环第一个节点,返回该节点并退出;
  • 该节点不在表中,说明无环,将节点指针加入表中,继续遍历;
  • 遍历到空,则说明无环。
ListNode* LinkedList::hasCycleBySet(ListNode *head) {if (head == nullptr || head->next == nullptr) return nullptr;std::unordered_set<ListNode*> set;ListNode *cur = head;while (cur) {if (set.find(cur) != set.end()) {return cur;}set.insert(cur);cur = cur->next;}return nullptr;
}

方法2:快慢指针(时:O(N), 空:O(1))

在快慢指针遍历链表的过程中,如果快指针遍历到nullptr,则说明无环。

如果有环,快慢指针一定会在环内相遇,当相遇发生之后,快指针回到头节点,慢指针不动,快慢指针同时一次一步的移动,直至相遇,相遇的位置即为入环的第一个节点。

ListNode* LinkedList::hasCycle(ListNode *head) {if (head == nullptr || head->next == nullptr) return nullptr;ListNode *slow = head;ListNode *fast = head;while (fast != nullptr && fast->next != nullptr) {slow = slow->next;fast = fast->next->next;if (slow == fast) {fast = head;while (fast != slow) {slow = slow->next;fast = fast->next;}return slow;}}return nullptr;
}
Notes

fast和slow必须同时从head出发!(fast=head->next,slow=head这样的出发就会差一个节点,永远无法结束)

链表相交

无环链表相交

最好理解和想到的方法就是,遍历两个链表,计算出两个链表的长度差值,让长链表先移动差值步,接着继续同时遍历,直到相遇或都为nullptr。

ListNode* LinkedList::findFirstIntersectionWithNoLoop(ListNode *head1, ListNode *head2) {ListNode *cur1 = head1;ListNode *cur2 = head2;int diff = 0;while (cur1) {cur1 = cur1->next;diff++;}while (cur2) {cur2 = cur2->next;diff--;}cur1 = diff > 0 ? head1 : head2; // cur1 -> the longer listcur2 = cur1 == head2 ? head1 : head2;diff = diff < 0 ? -diff : diff; // abs// cur1 move diff steps firstwhile (diff--) cur1 = cur1->next;while (cur1 != cur2) {cur1 = cur1->next;cur2 = cur2->next;}return cur1;
}

或者使用交换遍历的方式,因为无论如何两个链表都遍历的话,最后要不就相交,要不就都为nullptr。

注意,两个节点和一个节点相交时的循环判断。

ListNode* LinkedList::findFirstIntersectionWithNoLoopEx(ListNode *head1, ListNode *head2) {ListNode *cur1 = head1;ListNode *cur2 = head2;while ( cur1 != cur2 ) {cur1 = cur1 ? cur1->next : head2;cur2 = cur2 ? cur2->next : head1;}return cur1;
}

有环链表相交

有环链表有入环节点相同和入环节点不同两种情况:

  • 入环节点相同的话肯定相交,交点也一定在头节点到入环节点之间,等价于无环链表相交;
  • 入环节点不同的情况下:如果相交则,这两个节点一定都在一个环上,从其中一个节点开始遍历,到回到这个节点的过程中,如果没有遇到另外一个节点,则说明不相交,反之相交,随意返回其中一个节点即可。
ListNode* LinkedList::findFirstIntersectionWithLoops(ListNode *head1, ListNode *loop1, ListNode *head2, ListNode *loop2) {if (loop1 == loop2) {ListNode *cur1 = head1;ListNode *cur2 = head2;while (cur1 != cur2) {cur1 = cur1->next == loop1->next ? head2 : cur1->next;cur2 = cur2->next == loop1->next ? head1 : cur2->next;}return cur1;} else {ListNode *cur = loop1->next;while (cur != loop1) {cur = cur->next;if (cur == loop2) return cur;}return nullptr;}
}
http://www.yayakq.cn/news/560598/

相关文章:

  • 随州网站建设有哪些公司网站开发主流语言
  • 个人网站建设方法wordpress手动获取相关文章
  • 做网站就是做信息整合wordpress无法写文章
  • 运动健身型网站开发wordpress扁平化登录页源码
  • 网站模板编号网页版微信登录入口手机
  • 手绘风格的网站网络服务提供者发现用户利用其网络服务对未成年
  • 有了域名 怎么做网站上海松江区建设局官方网站
  • php网站开发流程步骤安阳七彩祥云网络公司
  • 网站开发工程是待遇网站开发用什么字体
  • 有什么交易网站源码aspnet网站开发技术
  • it网站制作策划珠海模板网站建设公司
  • 找人做的网站 没登录口企业推广案例
  • 网站建设专业性3千元在家办厂
  • 浏阳做网站的公司价格网站开发的流行架构
  • 户县做网站贵州建设网老网站
  • 泰安市住房和城乡建设局网站编程型网页制作工具
  • 一般哪些商家需要建设网站免费发布推广的平台有哪些
  • 上海网站制作案例通辽市 做网站
  • 可以充值的网站怎么做电商网站基本功能
  • 四川交投建设招标网站最新的网络营销方式
  • 比较大的软件下载网站网站建设公司问答营销案例
  • 网站模板和源码区别百度推广平台登录入口
  • php学什么可以做网站免费商城建站
  • 网站子网页怎么做网站建设及规划方案
  • 网站建设公司的公司哪家好网站设计抄袭
  • 谎称在网站网站做维护网站开发的主要工作
  • 给几个网站谢谢苏州优化方式
  • 沂南建设局网站上海建企业网站
  • 医保局微网站开发杭州网站建设服务
  • 虚拟机做的网站怎么让外网访问WordPress老文章提示