1、题目
编写一个程序,找到两个单链表相交的起始节点。
链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
2、思路分析
- 先计算出两个链表的长度,获取差值
- 然后将长的链表走差值步
- 此时两个链表开始同时走,如果pA和pB是同一个节点,那么就返回该节点
- 如果循环结束没有返回,则返回nullptr
3、代码展示
/**
* 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) {
ListNode* pA = headA;
ListNode* pB = headB;
int a = 0, b = 0;
while(pA != nullptr)
{
pA = pA->next;
++a;
}
while(pB != nullptr)
{
pB = pB->next;
++b;
}
int sub = a - b;
pA = headA;
pB = headB;
if(sub > 0)
{
while(sub-- != 0)
{
pA = pA->next;
}
}
else
{
while(sub++ != 0)
{
pB = pB->next;
}
}
while(pA != nullptr && pB != nullptr)
{
if(pA == pB)
return pA;
pA = pA->next;
pB = pB->next;
}
return nullptr;
}
};