Friday, March 25, 2016

LeetCode Q160: 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.

Solution;
A hard question at the first glance, however, it is easy if you can figure out how many node each linkedlist has.

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
int lenA=0;
int lenB=0;
ListNode* pA=headA;
ListNode* pB=headB;
while(pA!=NULL||pB!=NULL){
if(pA!=NULL){
lenA++;
pA=pA->next;
}
if(pB!=NULL){
lenB++;
pB=pB->next;
}
}
pA=headA;
pB=headB;
if(lenB>lenA)
for(int i=0; i<lenB-lenA; i++)
pB=pB->next;
if(lenA>lenB)
for(int i=0; i<lenA-lenB; i++)
pA=pA->next;
while(pA!=NULL&&pB!=NULL){
if(pA==pB)
return pA;
else{
pA=pA->next;
pB=pB->next;
}
}
return NULL;
}
};

No comments:

Post a Comment