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

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

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时,当找到第一个公共节点时循环也应该中断。
  • 注意不要生成两个链表而是应该链接
全部评论

相关推荐

03-29 17:05
门头沟学院 Java
asdasdasda...:我前段时间找工作焦虑,有几天连续熬夜熬穿了,然后心脏突然不舒服,立马躺床上睡觉了,然后第二天还是不舒服,去看医生说是心率不齐,吓得我后面天天早早睡觉,调养身体,过了好几天才好过来。所以真的,工作这些东西哪有那么重要,最多钱多一点钱少一点,降低物欲。活着才是最重要的,现在想想真的后怕
如何排解工作中的焦虑
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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