1、题意:
给出链表头节点,计算出链表是否是环形链表。
2、思想:
(1)链表中的节点的下一跳指向null说明不存在环路,否则反之。
(2)设置双指针,快指针k和慢指针m,快指针一次跳两个节点,慢指针一次跳一个节点。
如果不是环形链表,快指针会指向null或者快指针的下一跳指向null。如果是环形链表,快指针会与慢指针相碰撞(相等)。
3、代码实现:
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public boolean hasCycle(ListNode head) {
ListNode k=head;
ListNode m=head;
while (k!=null&&k.next!=null){
m=m.next;
k=k.next.next;
if (k == m) {
return true;
}
}
return false;
}
}