zoukankan      html  css  js  c++  java
  • 剑指offer python版 两个链表的第一个公共结点

    class ListNode(object):
        def __init__(self,x):
            self.val=x
            self.next=None
            
    class Link(object):
        def __init__(self,values=None):
            self.nodes=self.set_link(values) if  values else None
            
        def get_link(self):
            return self.nodes
        def set_link(self,values):
            if not values :
                return False
            head=ListNode(0)
            move=head
            
            
            try:
                for i in values:
                    tmp=ListNode(i)
                    move.next=tmp
                    move=move.next
                    
            except Exception as e:
                print(e)
                
            return head.next
    def aa(link1, link2):
        if not link1 or not link2:
            return None
        length1 = length2 = 0
        move1, move2 = link1, link2
        while move1:  # 获取链表长度
            length1 += 1
            move1 = move1.next
        while move2:
            length2 += 1
            move2 = move2.next
        while length1 > length2:  # 长链表先走多的长度
            length1 -= 1
            link1 = link1.next
        while length2 > length1:
            length2 -= 1
            link2 = link2.next
        while link1:  # 链表一起走
            if link1 == link2:
                return link1
            link1, link2 = link1.next, link2.next
        return None        
            
    
    
    
    
    
    
    a=Link([1,2,3,3,4,4])
    b=Link([3,6,3,2])
    
    m=a.get_link()
    q=b.get_link()
    
    print(aa(m,q))
            
            
    def aa(head1,head2):
        if not head1 or not head2:
            return False
        link1=0
        link2=0
        move1=head1
        move2=head2
        while move1:
            link1 +=1
            move1=move1.next
        while move2:
            link2 +=1
            move2=move2.next
            
        m=link1-link2
        if m>0:
            while m>0:
                head1=head1.next
                m -=1
        else:
            while m<0:
                head2=head2.next
                m +=1
                
        while head1:
            if head1==head2:
                return head1
            head1=head1.next
            head2=head2.next
            
        return None
  • 相关阅读:
    MySQL案例:一次单核CPU占用过高问题的处理
    编写你的第一个Django应用
    ks.cfg文件相关
    Kickstart部署多系统
    Kickstart部署之FTP架构
    Kickstart部署之HTTP架构
    Kickstart部署之NFS架构
    Kickstart无人值守原理及简介
    Linux下面Oracle实列实如何登录的
    welogic的受管理服务器无法启动
  • 原文地址:https://www.cnblogs.com/xzm123/p/9869012.html
Copyright © 2011-2022 走看看