zoukankan      html  css  js  c++  java
  • 链表节点链表相交(及相交的节点)、判断链表是否有环问题

    发一下牢骚和主题无关:

        给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否订交。

        

        struct Node { int data; int Node *next; }; // if there is no cycle. int isJoinedSimple(Node * h1, Node * h2) { while (h1->next != NULL) { h1 = h1->next; } while (h2->next != NULL) { h2 = h2-> next; } return h1 == h2; } // if there could exist cycle int isJoined(Node *h1, Node * h2) { Node* cylic1 = testCylic(h1); Node* cylic2 = testCylic(h2); if (cylic1+cylic2==0) return isJoinedSimple(h1, h2); if (cylic1==0 && cylic2!=0 || cylic1!=0 &&cylic2==0) return 0; Node *p = cylic1; while (1) { if (p==cylic2 || p->next == cylic2) return 1; p=p->next->next; cylic1 = cylic1->next; if (p==cylic1) return 0; } } Node* testCylic(Node * h1) { Node * p1 = h1, *p2 = h1; while (p2!=NULL && p2->next!=NULL) { p1 = p1->next; p2 = p2->next->next; if (p1 == p2) { return p1; } } return NULL; }

        

    链表无环求订交链表的第一个共同节点

        

    解决方案:

        方法1:利用两次循环

        每日一道理
    成熟是一种明亮而不刺眼的光辉,一种圆润而不腻耳的音响,一种不需要对别人察颜观色的从容,一种终于停止了向周围申诉求告的大气,一种不理会哄闹的微笑,一种洗刷了偏激的淡漠,一种无须声张的厚实,一种并不陡峭的高度。

        方法2:标记已访问的节点

        方法3:利用A和B节点数目之差

           

        

        

    1)计算出链表A的节点数目,记做c1;

        

    2)计算出链表B的节点数目,记做c2;

        

    3)算出节点数目之差:d = abs(c1 - c2);

        

    4)当初从节点数较多的链表开始,从头往前走过d个节点,从此节点往前走,两个链表有雷同数目的节点。

        

    5)此时我们可以同时遍历两个链表直到找到一个交点。

        

    这个算法的复杂度是O(m+n),是推荐使用的方法。

    文章结束给大家分享下程序员的一些笑话语录: IBM和波音777
      波音777是有史以来第一架完全在电脑虚拟现实中设计制造的飞机,所用的设备完全由IBM公司所提供。试飞前,波音公司的总裁非常热情的邀请IBM的技术主管去参加试飞,可那位主管却说道:“啊,非常荣幸,可惜那天是我妻子的生日,So..”..
      波音公司的总载一听就生气了:“胆小鬼,我还没告诉你试飞的日期呢!”

    --------------------------------- 原创文章 By 链表和节点 ---------------------------------

  • 相关阅读:
    python——二分查找算法
    python实现二分查找
    git merge 与 git rebase的区别
    mysql查询表死锁和结束死锁的方法
    mysql的undo log和redo log
    Python中给List添加元素的4种方法
    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
    Python中生成器和迭代器的区别(代码在Python3.5下测试):
    mysql锁
    每天一个linux命令(46):vmstat命令
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3095497.html
Copyright © 2011-2022 走看看