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.
Two pointers for Linked List.
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if(!headA || !headB) return NULL;
int lengthA = 0;
int lengthB = 0;
ListNode* l1 = headA;
ListNode* l2 = headB;
while(l1) {
lengthA++;
l1 = l1->next;
}
while(l2) {
lengthB++;
l2 = l2->next;
}
int diff = abs(lengthA - lengthB);
ListNode* longer = lengthA > lengthB ? headA : headB;
ListNode* shorter = lengthA > lengthB ? headB : headA;
while(diff > 0) {
longer = longer->next;
diff--;
}
while(longer && shorter) {
if(longer == shorter) return longer;
longer = longer->next;
shorter = shorter->next;
}
return NULL;
}
本文介绍了一种高效算法,用于在两个单链表中找到它们相交的节点。通过使用两个指针分别遍历两个链表,并在遍历过程中调整指针位置,最终能够确定相交节点。此方法适用于链表相交问题的解决。
580

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



