相交链表
给你两个单链表的头节点 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; } };

浙公网安备 33010602011771号