struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
//时间复杂度:O(m+n) 空间复杂度O(1)
//重点:cura和curb的变化
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if(!headA || !headB)
{
return NULL;
}
ListNode*ha = headA;
ListNode*hb = headB;
while(ha != hb)
{
//同时解决了没有相交节点的情况,如果没有交点就会在第二轮出现cura和curb同时指向空,结束while循环,return null
//但是如果有交点会在cura和curb相等且不为null时退出,此时return的cura就不是null
ha = ha?ha->next:headB;
hb = hb?hb->next:headA;
}
return ha;
}
};
算法原理:相同的路程,相同的终点,一定会一起到达。