题目:

算法思想:这道题有一个关键点就是如果A B链表相交,相交后面的部分是一样的,但是前面不相交的部分长度不同,如果A B链表同时跑,那么到达尾部时间不同,但是跑完之后A跑B链表,B跑A链表,那么本来不相交部分的长度变的相等了,都是A+B。需要注意的是即使链表完全不相交也不要紧,NULL可以看做相交点,就是判断条件不是A->next!=NULL,而是A!=NULL。
代码:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode *A = headA;
ListNode *B = headB;
while(A != B)
{
if(A != NULL)
A = A->next;
else
A = headB;
if(B != NULL)
B = B->next;
else
B = headA;
}
return A;
}
本文详细解析了链表相交问题的算法思想及其实现代码,通过双指针技巧,巧妙地解决了两个链表可能相交的问题,即使链表不相交也能正确处理。算法的关键在于利用链表自身的特点,让两个指针分别遍历两个链表,当遇到链表尾部时转向另一个链表,最终相遇点即为相交节点。
838

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



