vps网站能打开,广州网络营销类岗位,简单的网页设计作品源代码,有什么网站可以做跳转连接的环形链表
给定一个链表的头节点 head #xff0c;返回链表开始入环的第一个节点。 如果链表无环#xff0c;则返回 null。
如果链表中有某个节点#xff0c;可以通过连续跟踪 next 指针再次到达#xff0c;则链表中存在环。 为了表示给定链表中的环#xff0c;评测系统内…环形链表
给定一个链表的头节点 head 返回链表开始入环的第一个节点。 如果链表无环则返回 null。
如果链表中有某个节点可以通过连续跟踪 next 指针再次到达则链表中存在环。 为了表示给定链表中的环评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置索引从 0 开始。如果 pos 是 -1则在该链表中没有环。注意pos 不作为参数进行传递仅仅是为了标识链表的实际情况。
不允许修改 链表。
1.hash表 空间复杂度 On
2.快慢指针这个纯粹是数学逻辑用公式看比较容易理解
假设存在环无环长度是a,环长度是b快慢指针都是从head开始移动 快指针每次移动2步慢指针每次移动1格当他们相遇时候慢指针移动s步 那么快指针就移动了2s步
那么他们差额就是 2s-snb 得到snb(必须是环的整长度才会相遇) s anb;(n是正整数)
然后此时将快指针移动到头部head位置改为每次移动一步两个指针继续移动当快指针移动a步时候到达环入口处
此时慢指针移动了sa步 快慢指针此时差额是sa-a s nb刚好是环的整数倍必定在环中重合了。所以也就找到了环的起始点
这个纯粹是个数学题
package TOP21_30;import Util.ListNode;import java.util.HashSet;
import java.util.Set;// 环形链表
/*
给定一个链表的头节点 head 返回链表开始入环的第一个节点。 如果链表无环则返回 null。
如果链表中有某个节点可以通过连续跟踪 next 指针再次到达则链表中存在环。 为了表示给定链表中的环评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置索引从 0 开始。如果 pos 是 -1则在该链表中没有环。注意pos 不作为参数进行传递仅仅是为了标识链表的实际情况。
不允许修改 链表。*/
public class Top24 {// hash表 空间复杂度 o(n)public ListNode detectCycle(ListNode head) {if (head null) {return null;}SetListNode nodeSet new HashSet();while (head ! null) {if (nodeSet.contains(head)) {return head;}nodeSet.add(head);head head.next;}return null;}//快慢指针// 假设存在环无环长度是a,环长度是b// 快慢指针都是从head开始移动 快指针每次移动2步慢指针每次移动1格当他们相遇时候慢指针移动s步 那么快指针就移动了2s步// 那么他们差额就是 2s-snb 得到snb(必须是环的整长度才会相遇) s anb;(n是正整数)// 然后此时将快指针移动到头部head位置改为每次移动一步两个指针继续移动当快指针移动a步时候到达环入口处// 此时慢指针移动了sa步 快慢指针此时差额是sa-a s nb刚好是环的整数倍必定在环中重合了。所以也就找到了环的起始点// 这个纯粹是个数学题public ListNode detectCycle2(ListNode head) {if (head null) {return null;}ListNode fast head;ListNode slow head;while (true) {if (fast null || fast.next null) {return null;}fast fast.next.next;slow slow.next;if (fast slow) {break;}}fast head;while (slow!fast){fastfast.next;slowslow.next;}return fast;}
}harryptter / LeetcodeTop100 · GitCode