题目描述 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
提示:
listA 中节点数目为 m
listB 中节点数目为 n
0 <= m, n <= 3 * 104
1 <= Node.val <= 105
0 <= skipA <= m
0 <= skipB <= n
如果 listA 和 listB 没有交点, intersectVal 为 0 如果 listA 和 listB 有交点, intersectVal == listA[skipA + 1] == listB[skipB + 1]
代码
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
struct ListNode *A,*B,*p;
A=headA;
while(A!=NULL)
{
B=headB;
while(B!=NULL)
{
if(A==B)
{
p=A;
return p;
}
B=B->next;
}
A=A->next;
}
return NULL;
}
进阶: 你能否设计一个时间复杂度 O(n) 、仅用 O(1) 内存的解决方案?
官方题解 官方给出的代码
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
if (headA == NULL || headB == NULL) {
return NULL;
}
struct ListNode *pA = headA, *pB = headB;
while (pA != pB) {
pA = pA == NULL ? headB : pA->next;
pB = pB == NULL ? headA : pB->next;
}
return pA;
}
|