
点击查看代码
class Solution {
public:
ListNode *findFirstCommonNode(ListNode *headA, ListNode *headB) {
auto p = headA, q = headB;
while (p != q) {
if (p) p = p->next;
else p = headB;
if (q) q = q->next;
else q = headA;
}
return p;
}
};
- p 指针初始时指向 headA,每次都往后移动一步,当 p 走到 headA 的末尾,也就是 p = NULL 时,再从 headB 往后走;同理,q 指针初始时指向 headB,每次都往后移动一步,当 q 走到 headB 的末尾,也就是 q = NULL 时,再从 headA 往后走;
- 循环退出有两种情况:
① 两个链表有公共结点,设 headA 对应链表的长度为 a + c,headB 对应链表的长度为 b + c,其中 c 为公共段的长度,那么当 p 和 q 各走 a + b + c 步时,p 和 q 一定会在公共结点相遇;
② 两个链表没有公共结点,设 headA 对应链表的长度为 a,headB 对应链表的长度为 b,那么 p 和 q 各走 a + b 步时,p = q = NULL,也就是没有公共结点;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!