leetcood学习笔记-160*-相交链表
题目描述:
方法一:
class Solution(object): def getIntersectionNode(self, headA, headB): """ :type head1, head1: ListNode :rtype: ListNode """ a,b = headA,headB a_num,b_num = 0,0 while a: a = a.next a_num += 1 while b: b = b.next b_num += 1 if a_num >= b_num: gap = a_num - b_num while gap: headA = headA.next gap -= 1 while headA and headB: if headA == headB: return headA headA = headA.next headB = headB.next return else: gap = b_num - a_num while gap: headB = headB.next gap -=1 while headA and headB: if headA == headB: return headA headA = headA.next headB = headB.next return
优化后:
class Solution(object): def getIntersectionNode(self, headA, headB): """ :type head1, head1: ListNode :rtype: ListNode """ a,b = 0,0 p,q = headA,headB while headA and headB: headA,headB = headA.next,headB.next a,b = a+1,b+1 while headA: headA,p = headA.next,p.next while headB: headB,q = headB.next,q.next while p: if p==q: return p p,q = p.next,q.next return
方法二;指针追逐*
class Solution(object): def getIntersectionNode(self, headA, headB): """ :type head1, head1: ListNode :rtype: ListNode """ if not headA or not headB: return p,q = headA,headB while p!=q: p = p.next if p else headB q = q.next if q else headA return p