python编程300例-287两个链表的交叉

#两个链表的交叉
#1.问题描述
‘’’
请写一个程序,找到两个单链表最初的交叉节点冰返回该节点。如果连哥哥链表没有交叉,则返回null。
‘’’
#2.问题示例
‘’’
输入AB连个链表如下:
A:a1->a2

c1->c2->c3
/
B: b1->b2->b3
输出c1,即在节点c1开始交叉。
‘’’
#3.代码实现
#参数list_a:一个链表
#参数list_b:一个链表
#无返回值,直接打印出结果

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Lele
class ListNode:
    def __init__(self,val=None,next=None):
        self.value = val
        self.next =next

class Solution:
    def get_list_legnth(self,head):
        """获得链表长度"""
        length=0
        while head:
            length+=1
            head=head.next
        return length
    def get_intersect_node(self,list_a,list_b):
        length_a = self.get_list_legnth(list_a)
        length_b = self.get_list_legnth(list_b)
        cur1,cur2=list_a,list_b
        if length_a>length_b:
            for i in range(length_a- length_b):
                cur1=cur1.next
        else:
            for i in range(length_b-length_a):
                cur2=cur2.next
        flag=False
        while cur1 and cur2:
            if cur1.value==cur2.value:
                print(cur1.value)
                flag=True
                break
            else:
                cur1=cur1.next
                cur2=cur2.next
        if not flag:
            print('链表没有交叉结点')
#主函数
if __name__=='__main__':
    solution=Solution()
    list_a=ListNode('a1',ListNode('a2',ListNode('c1',ListNode('c2',ListNode('c3')))))
    list_b=ListNode('b1',ListNode('b2',ListNode('b3',ListNode('c1',ListNode('c2',ListNode('c3'))))))
    print("输入:")
    print("a= a1 a2 c1 c2 c3")
    print("b= b1 b2 b3 c1 c2 c3")
    print("输出:")
    solution.get_intersect_node(list_a,list_b)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值