相交链表
给你两个单链表的头节点 headA
和 headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null
。
图示两个链表在节点 c1
开始相交:
题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { //先计算链表长度 int LenA = 0; ListNode *p = headA; while(p){ LenA++; p = p->next; } int LenB = 0; ListNode *q = headB; while(q){ LenB++; q = q->next; } //重置指针 p = headA; q = headB; //较长的链表先移动指针 int len = max(LenA,LenB)-min(LenA,LenB); if(LenA>LenB){ while(len--){ p=p->next; } }else{ while(len--){ q=q->next; } } //同时移动两个指针 while(p&&q){ if(p==q){ return p; } p=p->next; q=q->next; } return NULL; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探