请教一个题目:有环单链表相交判断练习题

题目地址:http://www.nowcoder.com/questionTerminal/af0b526dc7df4d9f8727433e6a48c338
题目:
如何判断两个有环单链表是否相交?相交的话返回第一个相交的节点,不想交的话返回空。如果两个链表长度分别为N和M,请做到时间复杂度O(N+M),额外空间复杂度O(1)。
给定两个链表的头结点head1head2(注意,另外两个参数adjust0adjust1用于调整数据,与本题求解无关)。请返回一个bool值代表它们是否相交。

我的解答:
/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class ChkIntersection {
    bool chkInter(ListNode* head1, ListNode* head2, int adjust0, int adjust1) {
        ListNode *l1 = getFirstInCircleNode(head1);
        ListNode *l2 = getFirstInCircleNode(head2);

        if(l1==l2)return true;//入环节点相同,肯定是相交
   
        else{//否则
           
            ListNode *al1 = l1;
            int flag = 0;
            while(flag==0||al1!=l1){
                flag = 1;
                if(al1==l2)return true;//相交的另一种情形
                al1=al1->next;                
            }
            return false;//跳出循环后自动返回不相交
        }
        return false;
    }
    
    //下面这个函数是获取有环链表第一个入环节点,没有返回NULL
    ListNode *getFirstInCircleNode(ListNode* head){
        ListNode *f,*s;//分别是快指针和慢指针
        f=s=head;
        while(f!=NULL&&f!=s){
            f=f->next;//快走一步
            s=s->next;//慢走一步
            if(f!=NULL){//快再走一步                 f=f->next;
            }//由于明确了是有环链表,故不判断else了,其实上面的if个人认为也不需要
        }
         
        f=head;
        while(f!=s){
            f=f->next;
            s=s->next;
        }
        return f;  
    }
};
实在找不出哪里错了,但是提交总是返回错误,求大神指教!
错误提示:

全部评论
自己发现问题了, 哎, getFirstInCircleNode 这个函数返回的总是头结点~,应该让s和f分别先走一两步再来循环比较的。
点赞 回复 分享
发布于 2016-03-05 09:36
求助
点赞 回复 分享
发布于 2016-03-05 00:27

相关推荐

03-25 19:00
东北大学 Java
程序员牛肉:太好了,是聊天记录。不得不信了。 当个乐子看就好,不要散播焦虑
点赞 评论 收藏
分享
我是985研究生,最近学校在组织开题,大家都在非常紧张地准备,但我一直进入不了状态,很想做但是心又很浮躁。但我的室友们感觉都非常认真,每天醒来就开始看论文,睡着前最后一件事还是在看论文,我非常焦虑。我感觉自己甚至有点把大家当做假想敌了。这种比较心态还存在于生活的各种方面:看到有钱的同学会非常羡慕,看到朋友圈里面环游世界的留学生同学也会羡慕,看到那些工作后有自己的钱而过上较为阔绰的生活的时候还是羡慕,就仿佛只有自己一个人在阴暗爬行。而且这些比较是每时每刻的,为了不比较,我已经关闭了朋友圈,但是每次偶尔刷一下还是会难受很久。我知道比较是偷走幸福的小偷,但我好像控制不了,感觉自己是一个偷窥别人生活的...
若怜君欢:担心开题搞砸了,幻想拥有别人的生活,本质上是因为自卑,楼主小时候大概率是留守儿童或者父母关系很紧张,导致楼主没有安全感、焦虑、内耗。 这样的情况最好的办法就是建立自信和降低期待,建立自信不是一蹴而就,而是循序渐进,比如告诉自己允许自己第一次没把事情做好,失败了能搞清楚其中缘由而不是全盘否定自己,失败不是终点,放弃才是;降低期待只要记住一句话即可,能伴随你一生的,只有经验和学识,所以你对事情的态度应该更多地去思考它是否能带来学识和经验的增长,而不是仅仅用短期的利益作为唯一期待。 人生不是一成不变的,它是可以迭代更新的,去归纳总结自身的不足并结合实际去改进,去尝试一些新的思路和方法,不要固执钻牛角尖,也不要反复横跳,为自己设立一个高度聚集的精神内核,内核之上可以去尝试一切有利于自己更好的方式 以上就是我个人对生活的理解,共勉
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务