面試:阿里伯樂在線評測鏈表


  如果兩個鏈表相交,又都不存在環,那么從第一個相交點開始之后的結點都相同(構成了一個Y型)。因此,只要分別遍歷這兩個鏈表,找到末尾結點,如果末尾結點相同,即可確認相交。
  如果要求這種情況的交點,由於相交部分全部都相同,所以彼此的長度差異存在於相交之前的部分。因此,只需要先得到兩個鏈表的差d,然后將較長的鏈表截去前d個結點;此時,兩個鏈表同時出發向后遍歷,第一個相等的結點即為交點。
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None
def node(l1, l2):
    length1, lenth2 = 0, 0
    # 求兩個鏈表長度
    while l1.next:
        l1 = l1.next
        length1 += 1
    while l2.next:
        l2 = l2.next
        length2 += 1
    # 長的鏈表先走
    if length1 > lenth2:
        for _ in range(length1 - length2):
            l1 = l1.next
    else:
        for _ in range(length2 - length1):
            l2 = l2.next
    while l1 and l2:
        if l1.next == l2.next:
            return l1.next
        else:
            l1 = l1.next
            l2 = l2.next

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM