题解 | #两个链表的第一个公共结点#

两个链表的第一个公共结点

https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46

# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

#
#
# @param pHead1 ListNode类
# @param pHead2 ListNode类
# @return ListNode类
#
class LinkNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next


class Solution:
    def length_list(self, head: LinkNode):
        current = head
        length = 0
        while current:
            length += 1
            current = current.next
        return length

    def FindFirstCommonNode(self, pHead1, pHead2):
        # 有一个空链表
        if not (pHead1 and pHead2):
            return None

        n1 = self.length_list(pHead1)
        n2 = self.length_list(pHead2)
        p1 = pHead1
        p2 = pHead2
        if n1 >= n2:
            for i in range(n1 - n2):
                p1 = p1.next
        else:
            for i in range(n2 - n1):
                p2 = p2.next

        while p1 and p2:
            if p1 == p2:
                return p1
            p1 = p1.next
            p2 = p2.next
        return None

  • 如果不同节点具有相同的值,则按值比较节点(使用p1.val != p2.val)可能不起作用。应该比较节点本身(通过引用)以找到第一个公共节点。
  • while 循环之后应该返回公共节点。除了当p1变为时None时,当找到第一个公共节点时循环也应该中断。
  • 注意不要生成两个链表而是应该链接
全部评论

相关推荐

07-14 13:47
门头沟学院 Java
Lynn012:你评估好自己的位置了吗《顶尖应届》
投递小米集团等公司7个岗位
点赞 评论 收藏
分享
吴offer选手:下午mt一来就告警说项目来不及,估计明天拿了权限就要参与开发了 已老实
实习生的蛐蛐区
点赞 评论 收藏
分享
最近拿到了正浩的提前批offer感觉自己的实力得到了肯定,也给了我更多底气
搞机墨镜猫:正浩提前批官网好像就只有电力电子软硬件,哥们投的是这两个岗位吗
26届校招投递进展
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务