奥利给:力扣160:相交链表

这一道题的思路:
1、如国两个链表有一个为NULL,那就直接返回NULL;
2、如果两个链表相交,那么搜索的长度=短链表的长度;
3、题目默认不存在val相等,相等,突然不相等的情况;

遇到的问题:测试用例,返回1,预期是8

为什么?
因为题目想要的是节点一样而不是节点值一样,对于两个值为1的节点,他们的前驱是不一样的,因此,第一个相等的节点是值为8的节点

解决的方法:
把判断值相等改为判断链表相等;

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */
class Solution {
   
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) 
    {
   
        //如果A或者B为NULL,直接返回NULL
        if(headA==NULL||headB==NULL)
        return NULL;

        //判断AB的长度,搜索长度=短链表长度
        ListNode *tmpA=headA;
        ListNode *tmpB=headB;
        int lenA=0;
        int lenB=0;
        while(tmpA!=NULL)
        {
   
            lenA++;
            tmpA=tmpA->next;
        }
        while(tmpB!=NULL)
        {
   
            lenB++;
            tmpB=tmpB->next;
        }
        tmpA=headA;
        tmpB=headB;
        if(lenA>lenB)
        {
   
            int i=lenA-lenB;
            while(i)
            {
   
                tmpA=tmpA->next;
                i--;
            }
        }
        else 
        if(lenA<lenB)
        {
   
            int i=lenB-lenA;
            while(i)
            {
   
                tmpB=tmpB->next;
                i--;
            }
        }

        //
        while(tmpA!=NULL)
        {
   
            if(tmpA==tmpB)
            return tmpA;
            else 
            tmpA=tmpA->next;
            tmpB=tmpB->next;
        }
        return NULL;
    }
};


杂谈:
今年的这个寒假特别长,努力一年考上了研究生,心态慢慢的发生了变化,曾经以为自己要多么努力的做实验,写论文,要继续大学期间的苦读;如今,看清了眼前的道路,毕业也就是一个普普通通的程序员,我是到了今天才知道,原来我这个也算是转行,突然就明白了软件工程与通信工程的质的区别。

今天刷知乎,看了一个回答,25岁坚持做什么,可以让5年后的自己受益:坚持做以时间为成本的事情。

5年做到一个领域的顶尖,让30岁的自己为25岁的自己骄傲自豪,所幸今年虚岁23,时间还大把的有啊,这个疫情期间,多刷刷代码,目前数据结构也就比较熟悉链表,定个小目标,先把链表的简单题目做完

刷题总结类 文章被收录于专栏

这里记录一些刷题时候的总结思考

全部评论

相关推荐

10-15 16:27
门头沟学院 C++
LeoMoon:建议问一下是不是你给他付钱😅😅
点赞 评论 收藏
分享
冲芭芭拉鸭:你这图还挺新,偷了。
投递美团等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务