zoukankan      html  css  js  c++  java
  • 剑指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;  
    }
  • 相关阅读:
    1、数据加密基础
    cookie——小甜品
    使用SpringBoot开发REST服务
    从编辑距离、BK树到文本纠错
    360影视视频下载
    从Trie树到双数组Trie树
    使用websocket-sharp来创建c#版本的websocket服务
    OFFICE 文档转换为html在线预览
    IDEA+PHP+XDebug调试配置
    HTML5录音控件
  • 原文地址:https://www.cnblogs.com/linxuesong/p/12222364.html
Copyright © 2011-2022 走看看