题目描述
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
图示两个链表在节点 c1 开始相交:
分析:
**题目描述的寻找两链表的公共头部,也就头部之后的点 他们是相等的, 所以考虑右端对齐问题,也就是尾部对齐问题 **
先对两条链表扫描一遍,取得两者长度,然后让长的链表先走「两者的长度差值」,然后再同时走,遇到第一个节点即是答案。
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
int len1=0, len2=0;
ListNode *p1=headA, *p2=headB;
while(p1) {p1=p1->next; len1++;}
while(p2) {p2=p2->next; len2++;}
if(len1==0 || len2==0) return NULL;
p1 = headA;
p2 = headB;
if(len1 > len2)
{
int step = len1-len2;
while(step--) p1=p1->next;
}
else if(len2 > len1)
{
int step = len2-len1;
while(step--) p2=p2->next;
}
while(p1!=NULL && p2!=NULL)
{
if(p1 == p2) return p1;
p1 = p1->next;
p2 = p2->next;
}
return NULL;
}
};
此题解法很多种 此解法也不是最优