快慢指针

快慢指针问题

思路:定义两个指针,一个快指针(fastp),一个慢指针(slowp),在单链表中,让快慢指针同时从同一位置,向后遍历,他们每次的步数都固定,比如慢指针每次向后移动1步,快指针移动2步,当快指针到达最后时,慢指针就是中间位置,主要是明白他们的每一步的差是恒定的,所以两个指针的路程也是成比例的。
如果在环形链表中,则这两个指针一定会相遇。
image

例题:LeetCode 876. 链表的中间结点
LeetCode 141. 环形链表
image

//我的解答
class Solution {
    public ListNode middleNode(ListNode head) {
        if(head == null){
            return head;
        }
        ListNode p = head;
        ListNode p2 = head;
        while(p2 != null && p2.next != null){
            p = p.next;
            p2 = p2.next.next;
        }
        return p;
    }
}

题解:https://leetcode.cn/problems/middle-of-the-linked-list/solution/kuai-man-zhi-zhen-zhu-yao-zai-yu-diao-shi-by-liwei/

posted @ 2023-02-19 17:27  凉白茶  阅读(75)  评论(0编辑  收藏  举报