今天给大家介绍k6k4在线编程第1099道题:如何只遍历一次就找到单链表的中间节点。
技能
快慢双指针遍历法
算法思路:
使用一快一慢两个指针同时遍历链表,快指针每次往前走两步,慢指针每次走一步,当快指针遍历完后,慢指针相应走了一半长度, 此时慢指针所指的节点即为中间节点。
快慢双指针是单链表遍历常用的手段,以下拓展题目都用到了该方法。
拓展:
(1)查找链表的第 len(list)/N 个节点
慢指针每次走一步,快指针每次走len(list)/N步,当快指针走完时,慢指针所指向的节点即为目标节点 。
(2)查找链表的倒数第k个节点
快指针先走k步,然后两个指针同时往后走,每次走一步,当快指针走完时,慢指针则走到了倒数第k个节点。
(3)判断单链表是否存在环
慢指针每次走一步,快指针每次走两步,如果不存在环,两个指针不可能相遇,如果存在环则两个指针一定会相遇(why,这个我们后面一期专门分析)。
代码:
更多大厂面试题欢迎关注“BAT笔试面试”微信公众号