路至尽头,不见君,待到相遇,君亦如我
题目:
编写一个程序,找到两个单链表相交的起始节点。
如下面的两个链表:
解析:
链表A和B相交与否先不论,根据A+B = B + A。那么两指针先走完自己的链表后,再走对方的链表。那么两个链表走过的路程相等。
那么如果相交,可以看作将相交部分去掉,那么两个指针先走完彼此的路,最后携手走上共同的路。(是不是有点浪漫)
代码如下:
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if(headA == nullptr || headB == nullptr)
return nullptr;
ListNode *pa = headA;
ListNode *pb = headB;
while(pa!=pb) {
pa = !pa ? headB : pa->next;
pb = !pb ? headA : pb->next;
}
return pa;
}
};