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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章