zoukankan      html  css  js  c++  java
  • 面试题37:两个链表的第一个公共结点

    题目描述

    输入两个链表,找出它们的第一个公共结点。链表结点定义如下:

    题目分析

    剑指Offer(纪念版)P193 思路三

    代码实现

    ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2)
    {
        // 得到两个链表的长度
        unsigned int nLength1 = GetListLength(pHead1);
        unsigned int nLength2 = GetListLength(pHead2);
        int nLengthDif = nLength1 - nLength2;
     
        ListNode* pListHeadLong = pHead1;
        ListNode* pListHeadShort = pHead2;
        if(nLength2 > nLength1)
        {
            pListHeadLong = pHead2;
            pListHeadShort = pHead1;
            nLengthDif = nLength2 - nLength1;
        }
     
        // 先在长链表上走几步,再同时在两个链表上遍历
        for(int i = 0; i < nLengthDif; ++ i)
            pListHeadLong = pListHeadLong->m_pNext;
     
        while((pListHeadLong != NULL) && 
            (pListHeadShort != NULL) &&
            (pListHeadLong != pListHeadShort))
        {
            pListHeadLong = pListHeadLong->m_pNext;
            pListHeadShort = pListHeadShort->m_pNext;
        }
     
        // 得到第一个公共结点
        ListNode* pFisrtCommonNode = pListHeadLong;
     
        return pFisrtCommonNode;
    }
    
    unsigned int GetListLength(ListNode* pHead)
    {
        unsigned int nLength = 0;
        ListNode* pNode = pHead;
        while(pNode != NULL)
        {
            ++ nLength;
            pNode = pNode->m_pNext;
        }
     
        return nLength;
    }
    

      

  • 相关阅读:
    Appium+Python之异常自动截图
    Appium+Python之测试数据与脚本分离
    web测试方法总结
    软考之高级信息系统项目管理师资料
    软考之软件设计师资料
    Fiddler用法整理
    Appscan工作原理详解
    Appium+Python之元素定位和操作
    持续集成工具——Jenkins
    接口测试工具——postman
  • 原文地址:https://www.cnblogs.com/xwz0528/p/4896147.html
Copyright © 2011-2022 走看看