• Go语言实现:【剑指offer】两个链表的第一个公共结点


    该题目来源于牛客网《剑指offer》专题。

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

    Go语言实现:

    //长度长的先走个长度差,然后ab一起比较后面结点
    //长度一样,公共结点可能在首结点,即a=b
    //长度不一样,公共结点如果存在,只能在长度差之后
    func findFirstCommonNode(a, b *ListNode) *ListNode {
       lenA := getListNodeLen(a)
       lenB := getListNodeLen(b)
       //对齐长度差
       if lenA > lenB {
          len := lenA - lenB
          for len > 0 {
             a = a.Next
             len --
          }
       } else if lenB > lenA {
          len := lenB - lenA
          for len > 0 {
             b = b.Next
             len --
          }
       }
       //一起走
       for a.Next != nil {
          if a == b {
             return a
          }
          a = a.Next
          b = b.Next
       }
       return nil
    }
    
    func getListNodeLen(node *ListNode) int {
       count := 0
       for node.Next != nil {
          count ++
       }
       return count
    }
    
    //遍历a和b,利用map的key判断b中是否有与a相同结点
    func findFirstCommonNode(a, b *ListNode) *ListNode {
       maps := make(map[*ListNode]int)
       for a.Next != nil {
          maps[a] = 1
          a = a.Next
       }
       for b.Next != nil {
          _, ok := maps[b]
          if ok == true {
             return b
          }
          b = b.Next
       }
       return nil
    }
    
  • 相关阅读:
    struts2_maven_learning
    test_maven_实现表单验证
    Struts2_learning
    计算机信息安全技术_学习
    SQL_sql语言的学习
    ios视图加载时所涉及到的事件
    ios 判断版本更新
    ios 裁剪图片(1裁多)
    iOS 设置与配置
    ios Auto Layout中Stack View的使用
  • 原文地址:https://www.cnblogs.com/dubinyang/p/12099416.html
Copyright © 2020-2023  润新知