zoukankan      html  css  js  c++  java
  • 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
    }
    
  • 相关阅读:
    8 pandas模块,多层索引
    7 numpy 傅里叶,提取图片轮廓
    6 DataFrame处理丢失数据--数据清洗
    5 pandas模块,DataFrame类
    4 pandas模块,Series类
    3 numpy模块
    2 线性代数基础
    1 Ipython、Jupyter 入门
    jdk安装与环境变量配置(一劳永逸)
    对jsp可见域的变量感悟
  • 原文地址:https://www.cnblogs.com/dubinyang/p/12099416.html
Copyright © 2011-2022 走看看