# -*- coding:utf-8 -*-
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def FindFirstCommonNode(self, pHead1, pHead2):
list1_length = self.get_list_length(pHead1)
list2_length = self.get_list_length(pHead2)
long_list = None
short_list = None
subtract_distance = 0
if list1_length > list2_length:
long_list = pHead1
short_list = pHead2
subtract_distance = list1_length - list2_length
else:
long_list = pHead2
short_list = pHead1
subtract_distance = list2_length - list1_length
for _ in range(subtract_distance):
long_list = long_list.next
while short_list:
if long_list.val == short_list.val:
return short_list
long_list = long_list.next
short_list = short_list.next
if short_list == None:
return None
def get_list_length(self, pHead):
list_length = 0
p = pHead
while p is not None:
list_length += 1
p = p.next
return list_length
if __name__ == "__main__":
tri_list = input()
list1 = list(tri_list[0])
list2 = list(tri_list[1])
list3 = list(tri_list[2])
tmp = None
pHead1 = None
pHead2 = None
for i in range(len(list1)):
if tmp is None:
tmp = ListNode(list1[i])
pHead1 = tmp
else:
tmp.next = ListNode(list1[i])
tmp = tmp.next
for i in range(len(list3)):
tmp.next = ListNode(list3[i])
tmp = tmp.next
tmp = None
for i in range(len(list2)):
if tmp is None:
tmp = ListNode(list2[i])
pHead2 = tmp
else:
tmp.next = ListNode(list2[i])
tmp = tmp.next
for i in range(len(list3)):
tmp.next = ListNode(list3[i])
tmp = tmp.next
so = Solution()
merge_head = so.FindFirstCommonNode(pHead1, pHead2)
p = merge_head
while p is not None:
print(p.val)
p = p.next
剑指offer 两个链表的第一个公共节点
最新推荐文章于 2020-07-30 15:16:22 发布