判断一个链表是否有环,需要考虑头结点吗?
判断一个链表是否有环,如下代码,需要考虑头结点吗?如果考虑头结点,那么p2=head.next不就是第一个结点了吗?若为空,while判断为false,链表没有结点,不应该返回false吗?为什么下面代码是true啊?
public static boolean hasLoop(Node head){
Node p1=head;
Node p2=head.next;
while(p2!=null){
int n1=p1.val;
int n2=p2.val;
if (n1==n2) {
return true;
}
p1=p1.next;
p2=p2.next.next;
if (p2==null) {
return false;
}
}
return true;//若p2为空,该链表只有一个节点,也说明该链表有环
}
Node p1=head;
Node p2=head.next;
while(p2!=null){
int n1=p1.val;
int n2=p2.val;
if (n1==n2) {
return true;
}
p1=p1.next;
p2=p2.next.next;
if (p2==null) {
return false;
}
}
return true;//若p2为空,该链表只有一个节点,也说明该链表有环
}