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


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

    一、总结

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

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

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

    题目描述

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

    三、代码

    代码一:

     1 /*
     2 找出2个链表的长度,然后让长的先走两个链表的长度差,然后再一起走
     3 (因为2个链表用公共的尾部)
     4 */
     5 class Solution {
     6 public:
     7     ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) {
     8         int len1 = findListLenth(pHead1);
     9         int len2 = findListLenth(pHead2);
    10         if(len1 > len2){
    11             pHead1 = walkStep(pHead1,len1 - len2);
    12         }else{
    13             pHead2 = walkStep(pHead2,len2 - len1);
    14         }
    15         while(pHead1 != NULL){
    16             if(pHead1 == pHead2) return pHead1;
    17             pHead1 = pHead1->next;
    18             pHead2 = pHead2->next;
    19         }
    20         return NULL;
    21     }
    22      
    23     int findListLenth(ListNode *pHead1){
    24         if(pHead1 == NULL) return 0;
    25         int sum = 1;
    26         while(pHead1 = pHead1->next) sum++;
    27         return sum;
    28     }
    29      
    30     ListNode* walkStep(ListNode *pHead1, int step){
    31         while(step--){
    32             pHead1 = pHead1->next;
    33         }
    34         return pHead1;
    35     }
    36 };

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

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

    代码二:

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

    不用记长度

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

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

     1 class Solution {
     2 public:
     3     ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) {
     4         ListNode *p1 = pHead1;
     5         ListNode *p2 = pHead2;
     6         while(p1!=p2){
     7             p1 = (p1==NULL ? pHead2 : p1->next);
     8             p2 = (p2==NULL ? pHead1 : p2->next);
     9         }
    10         return p1;
    11     }
    12 };

    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

  • 相关阅读:
    doT js模板入门
    @SuppressWarnings忽略警告
    SQL注入
    【转】Oracle 执行动态语句
    连接数据库——模拟ATM机查、存、取、开户功能
    Oracle 函数中动态执行语句
    PowerDesigner建表
    数据库表设计—水电费缴费系统
    GUID全局唯一标识符相关知识了解
    Oracle数据库建表+添加数据练习
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9080185.html
Copyright © 2020-2023  润新知