博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
判断俩单链表是否相交
阅读量:4071 次
发布时间:2019-05-25

本文共 2043 字,大约阅读时间需要 6 分钟。

AC 代码 总的来说,单链表分为两种 无环单链表,有环单链表,判断单链表相交则可转化为 俩无环单链表是否相交,俩有环单链表是否相交,而一条有环一条无环一定不可能相交!

class ChkIntersection {    ListNode * findLoopNode(ListNode* head,int &len){//查找入环借点,若无环返回NULL;若无环即得到无环单链表长度        ListNode *quick=NULL,*slow=head->next;        ++len;        if(!slow)            return NULL;        quick = slow->next;        ++len;        while (true) {            if(!quick||!slow)                return NULL;            if(quick == slow)                break;            slow = slow->next;            quick = quick->next;            ++len;            if(!quick)                return NULL;            quick = quick->next;            ++len;        }        quick = head;        while (quick!=slow) {            quick = quick->next;            slow = slow->next;        }        return quick;    }    ListNode *walknums(ListNode *head,int nums){//让长的链表先走nums 步        while (nums--) {            head = head->next;        }        return head;    }public:    bool chkInter(ListNode* head1, ListNode* head2, int adjust0, int adjust1) {        if(!head1||!head2)            return false;        int len1 = 0,len2 = 0;        ListNode * loop1 = findLoopNode(head1,len1), *loop2 = findLoopNode(head2,len2);        if((loop1==NULL&&loop2)||(loop1&&loop2==NULL))//一个有环 ,一个无环            return false;        else if(loop1==NULL&&loop2==NULL){//俩个都无环            if(len1>=len2)                head1 = walknums(head1,len1-len2);            else                head2 = walknums(head2,len2-len1);            while (head1&&head2) {                if(head2==head1)                    return true;                head1 = head1->next;                head2 = head2->next;            }            return false;        }else{//俩有环单链表相交            if(loop1==loop2)                return true;            else{                ListNode * p =loop1->next;                while (p!=loop1) {                    if(p==loop2)                        return true;                    p = p->next;                }                return false;            }        }    }};

转载地址:http://ghhji.baihongyu.com/

你可能感兴趣的文章
SIGN UP BEC2
查看>>
S3C2440中对LED驱动电路的理解
查看>>
《天亮了》韩红
查看>>
Windows CE下USB摄像头驱动开发(以OV511为例,附带全部源代码以及讲解) [转]
查看>>
出现( linker command failed with exit code 1)错误总结
查看>>
iOS开发中一些常见的并行处理
查看>>
iOS获取手机的Mac地址
查看>>
ios7.1发布企业证书测试包的问题
查看>>
如何自定义iOS中的控件
查看>>
iOS 开发百问
查看>>
Mac环境下svn的使用
查看>>
github简单使用教程
查看>>
如何高效利用GitHub
查看>>
环境分支-git版本管理
查看>>
uni-app 全局变量
查看>>
js判断空对象的几种方法
查看>>
java 不用递归写tree
查看>>
springboot2 集成Hibernate JPA 用 声明式事物
查看>>
fhs-framework jetcache 缓存维护之自动清除缓存
查看>>
SpringBoot 动态编译 JAVA class 解决 jar in jar 的依赖问题
查看>>