面试题52:两个链表的第一个公共结点

题目描述:

输入两个链表,找出它们的第一个公共结点。

解题思路:

链表1长m;链表2长n
思路一:两层for循环 时间复杂度O(mn)
思路二:引入两个辅助栈
思路三:先遍历一遍得到长度差,在遍历比较
#0.首先遍历一遍两个链表,得到他们的长度m,n
#1.然后计算长度差为d,另长表先走d步,然后短表也开始遍历。
#2.当遍历到第一个相同地址时,即为第一个公共节点。
#3.时间复杂度为O(m+n)

思路三
# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    def FindFirstCommonNode(self, pHead1, pHead2):
        # write code here
        p1 = pHead1
        p2 = pHead2
        len1 = 0
        len2 = 0
        #首先遍历一遍得到链表的长度
        while p1:
            len1 += 1
            p1 = p1.next
        while p2:
            len2 += 1
            p2 = p2.next
        diff = len1-len2
        plong = pHead1
        pshort = pHead2
        if diff < 0:
            plong = pHead2
            pshort = pHead1
            diff = abs(diff)
        #先让长链表走几步
        for i in range(diff):
            plong = plong.next
        #两个链表一起走
        while plong and pshort:
            if plong.val == pshort.val:
                return plong
            plong = plong.next
            pshort = pshort.next
        return None
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载请注明出处://www.greatytc.com/p/c65d9d753c31 在上一篇博客《数据结构...
    Alent阅读 3,541评论 4 74
  • 【声明】欢迎转载,但请保留文章原始出处→_→文章来源://www.greatytc.com/p/08d08...
    梦工厂阅读 547评论 0 1
  • 2018/3/14 白色情人节 天气算是晴好 一大清早依旧是被嗓子剧烈疼痛以及脸部溃烂的痒唤醒 不知道从什么时候...
    carol_阿晨阅读 220评论 0 0
  • 每个写字的人都怀有这样的愿景,他们希冀着在某个时刻出现一个人,可以像另外一个自己一样,明白字里行间甚至每个细节的含...
    科大侠阅读 371评论 0 1
  • 我最喜欢黄昏的时候,坐在一片或青葱或枯黄或盎然或凄凄的总之很可爱的小山坡上。就像我家后面的那个小山坡,春天的时候开...
    PEARLGTT小侠阅读 434评论 0 0