offer37--两个链表的公共节点

来源:互联网 发布:云南2016年旅游数据 编辑:程序博客网 时间:2024/06/16 03:17
# coding=utf-8class ListNode():    def __init__(self, x):  # 定义链表节点        self.val = x        self.next = Nonedef findcommon(p1, p2):    n1 = Getlength(p1)    n2 = Getlength(p2)    n3 = abs(n1 - n2)    if n1 > n2:        pL = p1        ps = p2        pass    else:        pL = p2        ps = p1        pass    for i in range(n3):        pL = pL.next        pass    while pL != None and ps != None and pL.val != ps.val:        pL = pL.next        ps = ps.next        pass    if pL is None:        return None    else:        return pL.val    passdef Getlength(p):    n = 0    while p != None:        p = p.next        n += 1    return ndef genList(data):#构建链表    if len(data) == 0:        return None    head = ListNode(data[0])    tmp = head    for item in data[1:]:        tmp.next = ListNode(item)        tmp = tmp.next        pass    return head    passif __name__ == '__main__':    p1 = [1, 2, 3, 6, 7]    p2 = [4, 5, 6, 7]    s1 = genList(p1)    s2 = genList(p2)    print findcommon(s1, s2)