判断链表中是否有环--双指针法

定义两个指针,同时从链表的头节点出发,一个指针一次走一步,另一个指针一次走两步。如果走得快的指针追上了走得慢的指针,那么链表就是环形链表;如果走得快的指针走到了链表的末尾(next指向 NULL)都没有追上第一个指针,那么链表就不是环形链表。

import java.util.*;
/**
 * class ListNode {
 *     int val;
 *     ListNode next;
 * }
 */
public class Solution {
    public boolean checkHasCycle(ListNode head) {
        if(head==null || head.next==null){
            return false;
        }

        ListNode p1=head.next;
        ListNode p2=head.next.next;

        while(p1!=null&&p2!=null){
            if(p1==p2){
                return true;
            }

            p1=p1.next;
            if(p2.next!=null){
                p2=p2.next.next;
            }else{
                p2=null;
            }
        }

        return false;
    }

}





标签: 、面试
  • 回复
隐藏