快慢指针法,未知长链表找中点
对于知道长度的单链表,找中间节点的方法比较简单
可以使用双指针,一个指针先出发,遍历一半节点之后,另一个指针再出发,这样后指针遍历到尾时,前指针正好在中间
但是对于未知长度的单链表,一般采用先遍历一遍链表求长度,在从头循环len/2 次遍历到中间节点
改进:
使用快慢指针,一个指针每次前进两步,一个指针一次前进一步,但是需要注意快指针不要越界
public static ListNode middleNode1(ListNode head){
ListNode fast=head,slow=head;
while(fast.next!=null&&fast.next.next!=null){
fast=fast.next.next;
slow=slow.next;
}
if(fast.next!=null&&fast.next.next==null){//处理有偶数情况下最后一次fast和slow不移动
slow=slow.next;
}
return slow;
}
单链表数据结构:
class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
本文来自博客园,作者:荧惑微光,转载请注明原文链接:https://www.cnblogs.com/yinghuoweiguang/p/15778663.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具