代码随想录链表相交问题

51 阅读1分钟

image.png

分析

既然链表会相交说明在中间某部分至结尾两个链表存在公用部分直到末尾。但是链表总有长短,如何才能保证两个链表节点可以同步遍历,只需要从与短链表开始遍历即可,也就是长链表先进行节点前进 len(chang -duan) 直到与短链表节点数量相同,然后两个一起遍历直至出现交点。

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def getIntersectionNode(self, headA, headB):
        """
        :type head1, head1: ListNode
        :rtype: ListNode
        """
        dummy_headA = ListNode(next=headA)
        dummy_headB = ListNode(next=headB)
        cur_A = dummy_headA
        cur_B = dummy_headB
        size_A = 0
        size_B = 0
        while cur_A.next:
            size_A += 1
            cur_A = cur_A.next
        while cur_B.next:
            size_B += 1
            cur_B = cur_B.next
        cur_A, cur_B = dummy_headA, dummy_headB
        decre = abs(size_A - size_B)
        # 让A为最长的
        if size_A < size_B:
            cur_A, cur_B = cur_B, cur_A
        for i in range(decre):
            cur_A = cur_A.next
        while cur_A.next != cur_B.next and cur_A.next:
            cur_A = cur_A.next
            cur_B = cur_B.next
        intersec = cur_A.next
        return intersec
```
```