链表的快慢指针方法

1:快慢指针

指的是有两个指针,每次前进的距离不同
快慢指针的起点都一样:
前进快的就是快指针 前进慢的就是慢指针
快指针每次前进2格 慢指针每次前进一格

2:常见题目

  • 查找链表的中间节点
    如果链表长度为奇数,那么只用返回中间的值,如果链表长度为偶数,就返回第二个值
可以使用快慢指针
1:判断条件是。快指针不是空,快指针的下一步也不是空
fast!=null && fast.next!=null

当只有3个值的时候,快指针一次运行就到头了,此时慢指针就运行到中间


2:假如有4个数目

快指针第一次运行到第3个位置,慢指针运行到第2个位置
快指针下一次判断满足,运行到第4个位置,慢指针运行到第3个位置

结果快指针没有满足,慢指针也不动了,就运行到了第3个位置了
 public static ListNode middleNode(ListNode head) {

        if(head==null){
            return null;
        }
        ListNode fast=head.next.next;
        ListNode low=head.next;
        //核心方法在于,此时必须是fast不是null  fast.next不是null
        while (fast!=null && fast.next!=null){
            fast=fast.next;
            low=low.next;
        }
        return low;
    }
  • 判断链表是否用环
 public static boolean hasCycle(ListNode head) {
        if(head==null || head.next==null){
            return false;
        }
        ListNode fast=head;
        ListNode slow=head;
        while(fast!=null && slow!=null){
            fast=fast.next.next;
            slow=slow.next;
            if(fast==slow){
                return true;
            }
        }
        return false;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容