题目描述:给定两个单链表的头节点,请你找出并返回两个单链表相交的起始节点,如果两个链表没有交点,则返回nullptr。
设计思想:双指针法。两个链表的头指针先遍历完自己这个链表的全部节点,再遍历另一条链表的全部节点,若是在这个过程中都没有一个时刻指向同一个节点,那么返回nullptr。否则返回false,因为如果链表是相交的,那么应该有一个时刻两个指针指向同一个节点。
代码实现:
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if(headA==nullptr||headB==nullptr){
return nullptr;
}
ListNode *pa=headA;ListNode *pb=headB;
while(pa!=nullptr||pb!=nullptr){
if(pa==pb){
return pa;
}
pa= pa==nullptr?headB:pa->next;
pb= pb==nullptr?headA:pb->next;
}
return nullptr;
}
};