求两个相交的链表节点
题解
- 利用Map存节点 遍历链表
- 利用两个指针pa pb遍历两个链表
- pa == pb 则返回当前节点
- pa遍历完链表1则把pa指向链表2 pb遍历完链表2则把pa指向链表1
- 当pa pb 遍历完两个链表都没有相同的节点 则为无交点 有交点必会在两则遍历过程中遇到
代码
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if (nullptr == headA || nullptr == headB) return nullptr;
ListNode *pa = headA, *pb = headB;
if (pa == pb) return pa;
pa = pa->next, pb = pb->next;
while (pa || pb) {
if (pa == pb) return pa;
if (nullptr == pa && nullptr == pb) {
break;
}
if (nullptr == pb) {
pb = headA;
pa = pa->next;
} else if (nullptr == pa) {
pa = headB;
pb = pb->next;
} else {
pa = pa->next;
pb = pb->next;
}
}
return nullptr;
}
};