题目:
给定一个链表,判断链表中是否有环。
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
示例 1:
输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。
思路:给的pos啥意思?又不作为参数,写来干什么
使用快慢指针,慢指针一次走一步,快指针一次走二步,如果链表有环,必然相交
public boolean hasCycle(ListNode head) {
if(head==null||head.next==null){
return false;
}
ListNode left=head,right=head.next;
while(left!=null &&right!=null&&right.next!=null){
if(left==right){
return true;
}
left=left.next;
right=right.next.next;
}
return false;
}
但是我个人认为此题的作用太小,我们可以将目光放大一点,我们不仅要判断是否有环,而且还要返回入环的第一个节点
public ListNode process(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while (slow!=fast) {
if(fast.next==null||fast.next.next==null) {
return null;
}
slow = slow.next;
fast = fast.next.next;
}
fast = head;
while (fast != slow) {
fast = fast.next;
slow = slow.next;
}
return fast;
}