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


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

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

    思路:右对齐两个链表,如果两个链表有公共节点,则它们的形状必然是一个Y字形。

    长链表先走,实现右对齐,先假设这两个链表的长度相等,则我们可以同步遍历这两个链表,找到公共节点。现在有两个链表,我们可以先分别求齐长度得其差n,然后遍历长的那个链表n个节点,然后同步遍历这两个链表即可。hashmap存储遍历第一条链的节点,遍历另一条,寻找已经出现的key。

    func abs(x int) int {
        if x  < 0 {
            return -x
        }
        return x
    }
    func FindFirstCommonNode(pHead1, pHead2  *ListNode) *ListNode {
        if pHead1 == nil || pHead2 == nil {
            return nil
        }
        
        p1, p2 := pHead1, pHead2
        len1, len2 := 0, 0
        for p1 != nil {
            len1++
            p1 = p1.Next
        }
        for p2 != nil {
            len2++
            p2 = p2.Next
        }
        p1 = pHead1
        p2 = pHead2
        if len1 < len2 {
             p1 = pHead2
             p2 = pHead1
        }
        for i := 0;i < abs(len1 - len2);i++ {
            p1 = p1.Next
        }
        for p1 != nil && p2 != nil {
            if p1.Val == p2.Val {
                return p1
            } else {
                p1 = p1.Next
                p2 = p2.Next
            }
        }
        return nil
    }

     

  • 相关阅读:
    制作Windows Server 2008安装启动U盘
    wireshark教程(一)
    TCPdump抓包命令详解
    ATM交换机 和普通交换机区别
    胖ap和瘦ap区别
    酒店网络非常常见故障一例
    JQuery EasyUI DataGrid动态合并(标题)单元) 一
    字典表左右选择
    treegrid-dnd.js
    MySQL开发规范
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/14640933.html
Copyright © 2020-2023  润新知