• 剑指offer三十六--两个链表的第一个公共结点


    题目描述

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

    思路

    思路一:辅助map遍历2次链表

    思路二:长的那个链表截取长度差,两链表长度相同,同时遍历找到相同节点

    举例 1 2 3 4 5
    6 4 5
    将前面的12给截取,最后同时遍历后三个得到4

    思路三 以如下方式遍历两链表

    1 2 3 4 5 nullptr 5 4 6 nullptr
    6 4 5 nullptr 1 2 3 4 5 nullptr
    当两者节点相同时结束
    可以观察到4 5 重合时前面的元素个数一样
    数学归纳一般规律 AX BX;X代表相同部分,A、B代表不同部分(假设长度为m、n个)
    A(m) X B(m) X
    B(n) X A(n) X
    可见最后X前的长度均为m+n+X个
    特殊情况考虑
    情况一123 456 二者没有公共点 最后找到nullptr p1换成p2
    情况二m=n 123 423 在第一次就找到2时公共点 没问题
    情况三 一个链表为{nullptr} 另一个为{1 2 3 nullptr}
    1 2 3 nullptr nullptr
    nullptr 1 2 3 nullptr
    综上我们得出如下结论:
    当指向nullptr时切换另一个链表否则一直在本链表上遍历

    代码

    ListNode*FindFirstCommonNode(ListNode*pHead1,ListNode*pHead2) {  
            ListNode* p1 = pHead1;
            ListNode* p2 = pHead2;
            while(p1 != p2) {
                if(p1 == nullptr)
                    p1 = pHead2;// 链表一走完换二
                else
                    p1 = p1->next;
                if(p2 == nullptr) 
                    p2 = pHead1;// 链表二走完换一
                else
                    p2 = p2->next;
            }
            return p1;  
    }
  • 相关阅读:
    Singleton模式
    c++ 的重载、覆盖、隐藏
    Facade模式
    c++ 函数设计
    Adapter模式
    php.ini之完全中文版
    用PHP使Web数据分析进入更高境界
    PHP缩略图生成程序
    PHP例解Webzine编辑和发送
    原创]HTML网页间利用JavaScript通过URL传递变量
  • 原文地址:https://www.cnblogs.com/linxuesong/p/12222364.html
Copyright © 2020-2023  润新知