文章目录
- 😊题目
- 😉题解
- 😂1.双指针法
- 情况1:有相交的结点
- 情况2 :无相交的结点
- 😎2.减去长链表长的部分
😊题目
😉题解
😂1.双指针法
情况1:有相交的结点
情况2 :无相交的结点
当两个链表长度一样:直接遍历到结尾,此时pA = pB = NULL,返回pA
当两个链表长度不同:pA、pB遍历pA+pB链表的长度,
此时pA = pB = NULL,返回pA
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {if(!headA || !headB) //如果有一个链表为空的情况,就不可能相交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;
}
😎2.减去长链表长的部分
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {if(!headA || !headB) //如果有一个链表为空的情况,就不可能相交return NULL;struct ListNode *pA = headA, * pB = headB;int s1 = 0;int s2 = 0;for(; pA != NULL; pA = pA->next,s1++);for(; pB != NULL; pB = pB->next,s2++);pA = headA;pB = headB;int i=0,j=0;for(;i<s1 - s2;pA = pA->next,i++);for(;j<s2 - s1;pB = pB->next,j++);while(pA != pB){pA = pA->next;pB = pB->next;}return pA;
}