题目链接:Linked List Cycle
判断一个链表是否为单链表,就很容易,向前遍历直到null,就说明为单链表;
但是如果存在环,应该怎么办,并且要求不能有额外的空间,自己没想到合适的方法,搜索学习了下,通过使用快慢指针来,设置两个LinkNode,一个为slower,一个为faster,两个节点都从头节点开始向前,slower每次走一步,faster每次走两步,那么如果存在环的话,两者肯定会相遇的。
代码如下:
/**
* 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) {
if(head==null)
return false;
ListNode faster = head;
ListNode slower = head;
while(faster.next!=null&&faster.next.next!=null){
faster = faster.next.next;
slower = slower.next;
if(faster==slower)
return true;
}
return false;
}
}