'''
前提:两个链表如果有一个节点相同,则后面的所有节点肯定也一样
思路:利用栈的特性(从尾节点开始),循环判断栈尾元素是否相同,相同则pop()
link_list1:100->200->300->400->None
link_list2:666->888->300->400->None
'''
class Node:
def __init__(self,value):
self.value = value
self.next = None
class Solution:
def get_first_public_node(self,head1,head2):
#使用两个栈(后进先出),用来存放两个链表中的所偶遇节点
stack1 = []
stack2 = []
#加到栈中去
while head1:
stack1.append(head1)
head1 = head1.next
while head2:
stack2.append(head2)
head2 = head2.next
#存放第一个公共节点的
node = None
#当两个栈不为空,且最后1个节点相同,则弹出继续往前找
while stack1 and stack2 and stack1[-1] is stack_2[-1]:
#用变量node记录下这个相同节点
node = stack1.pop()
stack2.pop()
return node
if __name__ == '__main__':
s = Solution()
#创建节点
p1 = Node(100)
p2 = Node(200)
p3 = Node(300)
p4 = Node(400)
p5 = Node(666)
p6 = Node(888)
#将结点连接成链表
#链表1:100 200 300 400
p1.next = p2
p2.next = p3
p3.next = p4
#链表2:666 888 300 400
p5.next = p6
p6.next = p3
p3.next = p4
#打印出第一个公共节点:300
node = s.get_first_public_node(p1,p5)
print(node.value)
python 找出两个链表中第一个公共节点(两个链表如果有一个节点相同,后面的节点会都相同)
最新推荐文章于 2023-03-10 13:53:13 发布