https://leetcode.com/problems/intersection-of-two-linked-lists/
思路1
http://bookshadow.com/weblog/2014/12/04/leetcode-intersection-two-linked-lists/
判断交点是否存在
如果两个链表有交点,则它们的最后一个节点一定是同一个节点。所以当pA/pB到达链表末尾时,分别记录下A和B的最后一个节点。如果两个链表的末尾节点不一致,说明两个链表没有交点。
思路2
双指针逐步前进,当i到达tail时,继续前进到B链表;当j到达tail时,继续前进到A链表。这样在 i == j时,就是交点。
这是因为i,与j的指针的路程一样
我的思路:
就是求出两个链表的长度差dif,然后使用双指针指向各自链表的head。对于长一点的链表的指针,我们让其前进dif步,然后双指针一起前进,再判断是否相等。
my code:
class Solution(object):
def getIntersectionNode(self, headA, headB):
"""
:type head1, head1: ListNode
:rtype: ListNode
"""
lenA, i = 0, headA
while i:
lenA += 1
i = i.next
lenB, j = 0, headB
while j:
lenB += 1
j = j.next
flag = 1 if lenA >= lenB else 0
dif = abs(lenA - lenB)
i,j = headA, headB
if flag:
for k in xrange(dif):
i = i.next
else:
for k in xrange(dif):
j = j.next
while i:
if i == j:
return i
else:
i = i.next
j = j.next