Intersection of Two Linked Lists
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.
Notes:
- If the two linked lists have no intersection at all, return
null. - The linked lists must retain their original structure after the function returns.
- You may assume there are no cycles anywhere in the entire linked structure.
- Your code should preferably run in O(n) time and use only O(1) memory.
- 统计长度,减少内存空间
- ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
- if(headA == NULL) return NULL;
- if(headB == NULL) return NULL;
- int lenA = 1;
- int lenB = 1;
- ListNode *pA = headA;
- ListNode *pB = headB;
- while(pA->next != NULL) {
- lenA++;
- pA=pA->next;
- }
- while(pB->next!=NULL) {
- lenB++;
- pB=pB->next;
- }
- if(pA!=pB) return NULL;
- int len = max(lenA,lenB) - min(lenA,lenB);
- pA = headA;
- pB = headB;
- if(lenA>lenB) {
- while(len>0) {
- pA = pA->next;
- len--;
- }
- } else if(lenB > lenA){
- while(len>0) {
- pB = pB -> next;
- len--;
- }
- }
- while(pA!=pB) {
- pA = pA->next;
- pB = pB ->next;
- }
- return pA;
- }

浙公网安备 33010602011771号