前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode之Intersection of two linked list不同方法

LeetCode之Intersection of two linked list不同方法

作者头像
forrestlin
发布2018-05-24 11:04:22
3760
发布2018-05-24 11:04:22
举报
文章被收录于专栏:蜉蝣禅修之道蜉蝣禅修之道

AC完看答案发现答案超简单,而自己的方法有点过于复杂了,题目原意是找出两个链表第一个公共节点,如果没有则返回NULL。

看到题目后,我竟然想到可能存在交叉结构,结果通过反转一个链表来求出是否存在公共节点,但是却没法求出第一个公共节点,因此重新看回题目,发现根本不可能有交叉结构嘛,这是链表啊,一个节点怎么可能有多个next节点呢,两个链表如果有公共节点,其尾节点必然相同。不过,既然已经写了那么多了,那就顺着反转链表的方法继续往下写吧,其实我们只要知道了某个链表是从第几个节点开始进入公共结构就行了呗,所以这里我用了x1代表A链表非公共部分长度,y代表公共部分长度,x2代表B链表非公共部分长度,那么一开始我们可以知道A,B链表的长度,分别位alen=x1+y, blen=x2+y。然后反转A链表后,我们可以从B链表头结点开始遍历得到x1+x2的长度,设这个为rlen,那么x2=(blen-alen+rlen)/2,最后再遍历一遍B链表即可得到第一个公共节点。代码如下:

代码语言:javascript
复制
class Solution {
public:
    ListNode* reverseList(ListNode* head){
        if(!head||!head->next)
            return head;
        ListNode* node=head,*last=NULL;
        while(node){
            ListNode* tmp=node->next;
            node->next=last;
            last=node;
            node=tmp;
        }
        return last;
    }
    int getLength(ListNode* head){
        ListNode* node=head;
        int count=0;
        while(node){
            count++;
            node=node->next;
        }
        return count;
    }
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        if(!headA||!headB)
            return NULL;
        int bLen=getLength(headB),aLen=getLength(headA);
        ListNode* aLast=reverseList(headA);
        ListNode* node=headB;
        while(node->next){
            node=node->next;
        }
        if(node!=headA){
            reverseList(aLast);
            return NULL;
        }
        int reverseLen=getLength(headB);
        int x2=(reverseLen+bLen-aLen)/2;
        reverseList(aLast);
        int count=0;
        node=headB;
        while(node&&count<x2){
            node=node->next;
            count++;
        }
        return node;
    }
};

想的确实太复杂了,不过可以锻炼自己反转链表的代码速度,也是值得的,希望对大家有帮助。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年02月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档