php实现找两个链表的第一个公共结点(实例演示

一、总结

因为是链表,第一个节点公共之后,后面所有的节点都公共了

画个图实例演示一下,会超清晰且简单

二、php实现找两个链表的第一个公共结点

题目描述

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

三、代码

代码一:

 /*
找出2个链表的长度,然后让长的先走两个链表的长度差,然后再一起走
(因为2个链表用公共的尾部)
*/
class Solution {
public:
    ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) {
        int len1 = findListLenth(pHead1);
        int len2 = findListLenth(pHead2);
        if(len1 > len2){
            pHead1 = walkStep(pHead1,len1 - len2);
        }else{
            pHead2 = walkStep(pHead2,len2 - len1);
        }
        while(pHead1 != NULL){
            if(pHead1 == pHead2) return pHead1;
            pHead1 = pHead1->next;
            pHead2 = pHead2->next;
        }
        return NULL;
    }
     
    int findListLenth(ListNode *pHead1){
        if(pHead1 == NULL) return 0;
        int sum = 1;
        while(pHead1 = pHead1->next) sum++;
        return sum;
    }
     
    ListNode* walkStep(ListNode *pHead1, int step){
        while(step--){
            pHead1 = pHead1->next;
        }
        return pHead1;
    }
};

1->2->3->4->5->6->7->8

9->4->5->6->7->8

代码二:

用两个指针扫描”两个链表“,最终两个指针到达 null 或者到达公共结点。

不用记长度

两个链表一定有交点的话,方法是指向短链表指针先走完,然后指向长链表,指向长链表指针后走完,指向短链表。所以,第二次走过,一定会在交点相遇

如果两个链表的长度相同并且没有相同的结点,这是死循环

 class Solution {
public:
    ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) {
        ListNode *p1 = pHead1;
        ListNode *p2 = pHead2;
        while(p1!=p2){
            p1 = (p1==NULL ? pHead2 : p1->next);
            p2 = (p2==NULL ? pHead1 : p2->next);
        }
        return p1;
    }
};

1->2->3->4->5->6->7->8   9->4->5->6->7->8

9->4->5->6->7->8   1->2->3->4->5->6->7->8

最新文章

  1. LintCode Longest Common Subsequence
  2. NSMutableAttributedString的使用
  3. jquery获取checkbox的值并post提交
  4. Linux学习笔记17--Linux系统启动详解
  5. Ibatis.net防Sql注入
  6. OFBiz进阶之环境搭建(eclipse)
  7. 【转】cocos2d-x中锚点设置及定位方式
  8. Android添加桌面快捷方式的简单实现
  9. 解决PopupWindow遮住输入法
  10. Invert Binary Tree 解答
  11. Java单例模式的线程安全问题
  12. Spring Boot 系列教程16-数据国际化
  13. DOM4J介绍与代码示例(2)-XPath 详解
  14. 让getElementsByClassName兼容
  15. Secure backup
  16. [No0000171]wpf 类层次结构Class Hierarchy
  17. 解决ORA-00257: 归档程序错误。在释放之前仅限于内部连接
  18. 关于Unity中的光照(二)
  19. Android Studio添加so文件并打包到APK的lib文件夹中
  20. winRAR显示树树目录

热门文章

  1. jquery js解析函数、函数直接调用
  2. php课程 12-40 抽象类的作用是什么
  3. 23. Node.Js Buffer类(缓冲区)-(三)文件读取实例
  4. Impala的安装(含使用CM安装 和 手动安装)(图文详解)
  5. Win8.1恢复这台电脑里的6个文件夹
  6. Shiro学习总结(2)——Apache Shiro快速入门教程
  7. 设计模式六大原则(五):迪米特法则(Law Of Demeter)
  8. SpringMVC 传递相同名称的参数的最佳方法
  9. MySQLSocketPHPvimApache
  10. Oracle实现数据不存在则插入,数据存在则更新(insert or update)