PROBLEM:
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
A: a1 → a2
↘
c1 → c2 → c3
↗
B: b1 → b2 → b3
begin to intersect at node c1.
SOLVE:
C++:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB)
{
ListNode *p1 = headA;
ListNode *p2 = headB;
if (p1 == NULL || p2 == NULL) return NULL;
while (p1 != p2) {
p1 = (p1 == NULL? headB : p1->next);
p2 = (p2 == NULL? headA : p2->next);
} return p1;
}Python:
class Solution:
def getIntersectionNode(self, headA, headB):
if headA is None or headB is None:
return None
pa = headA
pb = headB
while pa is not pb:
pa = headB if pa is None else pa.next
pb = headA if pb is None else pb.next
return pa解释:每一个指针都把两个链表跑一遍,最后结果要么都是指向NULL要么相同。
本文介绍了一种寻找两个单链表相交起始节点的方法,使用双指针遍历两个链表,通过交换头指针的方式,使得两指针同时到达交点或尾部,从而找到交点。

被折叠的 条评论
为什么被折叠?



