奥利给:力扣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,时间还大把的有啊,这个疫情期间,多刷刷代码,目前数据结构也就比较熟悉链表,定个小目标,先把链表的简单题目做完
刷题总结类 文章被收录于专栏
这里记录一些刷题时候的总结思考