问题描述:
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.
C++:
/**
* 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) {
if(headA == NULL || headB == NULL)
return NULL;
int lenA,lenB;
lenA = 0,lenB = 0;
ListNode *p,*q;
for(p = headA;p != NULL;p=p->next)
lenA ++;
for(q = headB;q != NULL;q=q->next)
lenB ++;
int diff = abs(lenB-lenA);
if(lenA > lenB){
p = headA;
for(int i = 0;i < diff;i++)
p = p->next;
q = headB;
while(p != NULL && q != NULL){
if(p->val == q->val)
return p;
else{
p = p->next;
q = q->next;
}
}
return NULL;
}
else{
p = headB;
for(int i = 0;i < diff;i++)
p = p->next;
q = headA;
while(p != NULL && q != NULL){
if(p->val == q->val)
return p;
else{
p = p->next;
q = q->next;
}
}
return NULL;
}
}
};
python:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# @param two ListNodes
# @return the intersected ListNode
def getIntersectionNode(self, headA, headB):
if headA == None or headB == None:
return None
lenA = 0
lenB = 0
pa = headA
pb = headB
while pa != None:
lenA += 1
pa = pa.next
while pb != None:
lenB += 1
pb = pb.next
if lenA > lenB:
d = lenA - lenB
p = headA
for i in range(0,d):
p = p.next
q = headB
while q != None and p != None:
if p.val == q.val:
return p
else:
p = p.next
q = q.next
return None
else:
d = lenB - lenA
p = headB
for i in range(0,d):
p = p.next
q = headA
while q != None and p != None:
if p.val == q.val:
return p
else:
p = p.next
q = q.next
return None
推荐阅读:http://www.geeksforgeeks.org/write-a-function-to-get-the-intersection-point-of-two-linked-lists/