题目
给你一个链表的头节点 head ,判断链表中是否有环。有环返回true,否则返回false
数据结构:
class ListNode {
val: number
next: ListNode | null
constructor(val?: number, next?: ListNode | null) {
this.val = (val===undefined ? 0 : val)
this.next = (next===undefined ? null : next)
}
}
思路:
我们可以想象在跑道赛跑,当有一个人快,一个人慢时,如果有环,两人在一段时间后会出现套圈相遇的情况,如果无环则不会相遇,速度快的人会率先到达终点。 由此思路,我们可以进行环形链表的判断。 需要创建,快、慢两个变量,代表两个人,null作为终点,两个指针是否相同作为有环条件。
代码
function hasCycle(head: ListNode | null): boolean {
if(!head) return false;
let slow = head,fast = head;
while(fast && fast.next){
slow = slow.next;
fast = fast.next.next;
if(fast===slow){
return true;
}
}
return false;
}