力扣https://leetcode.cn/problems/intersection-of-two-linked-lists/description/
思路:
1.判断这两个链表是否相交。
相交链表的尾巴都是一样的。我们可以比较尾节点,尾节点相同则相交,尾节点不同即不相交。
2、求交点:
长的链表先走(长度差)步,再同时走,第一个相同就是交点
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB)
{
struct ListNode*tailA=headA;
struct ListNode*tailB=headB;
int lenA=1;
while(tailA->next)
{
lenA++;
tailA=tailA->next;
}
int lenB=1;
while(tailB->next)
{
lenB++;
tailB=tailB->next;
}
//最后一个节点相同--相交
if(tailA!=tailB)
{
return NULL;
}
//长度--差距步
int gap=abs(lenA-lenB);
struct ListNode*longList=headA;
struct ListNode*shortList=headB;
if(lenA<lenB)
{
shortList=headA;
longList=headB;
}
while(gap--)
{
longList=longList->next;
}
while(longList!=shortList)
{
longList=longList->next;
shortList=shortList->next;
}
return longList;
}