快慢指针
快慢指针问题
思路:定义两个指针,一个快指针(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; } }
本文作者:凉白茶
本文链接:https://www.cnblogs.com/zh-Note/p/17135147.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步