给你两个单链表的头节点 headA
和 headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null
。
思考:
解题的关键点在于链表节点的内存地址相等,因此只要判断第一个内存地址相等的节点就是相交节点,而不用去考虑是第几个节点或者考虑如何确定值相同的非相交节点。
如
[4,1,8,4,5]
[5,6,1,8,4,5]
虽然同时包括了1,但是1不是相交节点,因此无法共享内存地址。
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode *head1 = headA;
ListNode *head2 = headB;
while(head1 != head2)
{
head1 = head1 != nullptr ? head1 ->next :headB;
head2 = head2 != nullptr ? head2 ->next :headA;
}
return head1;
}
};