# LeetCode 160 — Intersection of Two Linked Lists（C++ Python）

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.

C++实现：

/**
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
{
return NULL;
}

int lenA = 1;
while(hA->next != NULL)
{
++lenA;
hA = hA->next;
}

int lenB = 1;
while(hB->next != NULL)
{
++lenB;
hB = hB->next;
}

if(hA != hB)
{
return NULL;
}

if(lenA > lenB)
{
for(int i = 0; i < lenA - lenB; ++i)
{
hA = hA->next;
}
}
else
{
for(int i = 0; i < lenB - lenA; ++i)
{
hB = hB->next;
}
}
while(hA != hB)
{
hA = hA->next;
hB = hB->next;
}
return hA;
}
};

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
return None

lenA = 1
while hA.next != None:
lenA += 1
hA = hA.next

lenB = 1
while hB.next != None:
lenB += 1
hB = hB.next

if hA != hB:
return None

if lenA > lenB:
for i in range(lenA - lenB):
hA = hA.next
else:
for i in range(lenB - lenA):
hB = hB.next

while hA != hB:
hA = hA.next
hB = hB.next

return hA


• 广告
• 抄袭
• 版权
• 政治
• 色情
• 无意义
• 其他

120