#两个链表的交叉
#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)