相交链表
原题在这里:
概述:求两链表的相同节点,如果没有则为null
于是很日常的遍历code:
class Solution { public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { if (!headA || !headB) return nullptr; ListNode *B = headB; while (B) { if (headA == B) return B; B = B->next; } return getIntersectionNode(headA->next, headB); } };
然后题解区发现有O(n+m)的解:
class Solution { public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { if (!headA || !headB) return nullptr; ListNode *B = headB; while (B) { if (headA == B) return B; B = B->next; } return getIntersectionNode(headA->next, headB); } };
注解都是这样的话:
1.走到尽头见不到你,于是走过你来时的路,等到相遇时才发现,你也走过我来时的路。
2.可以理解成两个人速度一致, 走过的路程一致。那么肯定会同一个时间点到达终点。如果到达终点的最后一段路两人都走的话,那么这段路上俩人肯定是肩并肩手牵手的。
3.你们之所以相遇,正是因为你走了 ta 走过的路,而 ta 也刚好走了你走过的路。这是何等的缘分!
4.如果选择了一起走下去,就要放弃一些东西,比如AC【恶搞】
好了好了,正常的注解:
pA走过的路径为A链+B链
pB走过的路径为B链+A链
pA和pB走过的长度都相同,都是A链和B链的长度之和,相当于将两条链从尾端对齐,如果相交,则会提前在相交点相遇,如果没有相交点,则会在最后相遇。
eg:
pA:1->2->3->4->5->6->null->9->5->6->null
pB:9->5->6->null->1->2->3->4->5->6->null
【Over】

浙公网安备 33010602011771号