快慢指针
快慢指针问题
思路:定义两个指针,一个快指针(fastp),一个慢指针(slowp),在单链表中,让快慢指针同时从同一位置,向后遍历,他们每次的步数都固定,比如慢指针每次向后移动1步,快指针移动2步,当快指针到达最后时,慢指针就是中间位置,主要是明白他们的每一步的差是恒定的,所以两个指针的路程也是成比例的。
如果在环形链表中,则这两个指针一定会相遇。
例题:LeetCode 876. 链表的中间结点
LeetCode 141. 环形链表
//我的解答
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;
}
}