這一道題的思路:
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,時間還大把的有啊,這個疫情期間,多刷刷代碼,目前數據結構也就比較熟悉鏈表,定個小目標,先把鏈表的簡單題目做完