ARTS 第一周 演算法 翻轉鍊錶

2021-09-24 10:17:03 字數 1792 閱讀 8928

反轉乙個單鏈表。

示例:輸入: 1->2->3->4->5->null

輸出: 5->4->3->2->1->null

變數在=左邊時為引用,在=右邊時為引用指向的記憶體位址。

* }* 輸入: 1->2->3->4->5->null

* 輸出: null

*/class solution

return prev;}}

2**試圖當視窗移動到null時成立並退出迴圈,但是1與3的執行實際上使得2永遠無法達成,形成死迴圈

* }* 輸入: 1->2->3->4->5->null

* 輸出: null

*/class solution

return prev;}}

1的執行使得prev和cur引用指向了同一記憶體位址,2的執行實際上改變了cur.next的值,使得cur.next也被賦予了tmp,3顯然就錯了

* }* 輸入: 1->2->3->4->5->null

* 輸出: null

*/class solution

return prev;}}

上面兩道錯誤的解題思路還有個問題在於無法正確處理邊界。我們通過tmp來儲存中間變數,兩道錯題儲存的是prev值。當視窗向右移動到null時,cur值會為null,此時我們返回的是prev而不是cur。這意味著我們無需處理cur.next的情況了,因為cur==null時會被捨棄。

swap需要臨時變數tmp協助,前面兩個錯誤的例題使用tmp來儲存prev的記憶體位址指向的值,而實際上tmp只能儲存cur.next的值。

class solution 

return prev;}}

兩個錯誤:

1)1中cur已經被賦予了其他值,2這時候的cur.next不再等於1中的cur.next。顯然需要中間變數來處理

2)1中cur賦值後可能為null,到2會發生空指標異常。因此cur賦值後不能再被使用,應直接進入迴圈判斷條件。

結論:實際上這道題解題通過迭代解決方式單一。tmp只能儲存cur.next,而不是儲存prev。這樣可以使得cur=tmp(cur在賦值後不會再在**塊中使用)

ARTS計畫第一周

two sum 本來我的解法是使用兩個迴圈,依次加到target,但看了看,另外一種解法感覺更有效 率,就是利用map的find來尋找與一數配對的另乙個數。class solution for int i 0 i nums.size i return result 最近想到養胃,所以特地找了這方面的...

ARTS挑戰第一周

2.review 3.tip 4.share 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。例項 給定 nums 2,7,11,15 targe...

ARTS打卡第一周

algorithm review tip 將本地已有的git倉庫關聯到乙個新的遠端倉庫 cd existing git repo git remote rename origin old origin 將原來的origin倉庫重新命名成old origin,僅本地修改,不影響遠端 git remot...