每日一刷-leetcode
2018.9.24 Q19
在思考了正常的流程後,需要單獨考慮一下邊界值:起始邊界等於-1、0、1,終止邊界等於len、len+1的情況,尤其是對於空不空的判斷。
本題中,正常的流程是:從頭開始數出間隔為 n 的節點(記為a,b),兩個節點一起向後移動,直到後一個節點為空,則前者節點即為倒數第 n 個節點。考慮到是要對節點進行刪除操作,所以最好的方法是 將待刪除節點的前一個節點 作為前者節點a,操作更合理。而對於邊界,則需要考慮正常的思路中能不能正確處理邊界的情況,不斷修正程式直至能夠正確處理所有資料。本題中,若連結串列長度為1,又保證了n是有效的,則直接返回NULL;若n=1,則需要考慮到待刪除節點在連結串列隊尾,不能訪問a->next->next(為NULL)的所有屬性(當然刪除操作不需要訪問這個節點的一些屬性);若n=連結串列長度,則需要考慮到,此時的a就是待刪除節點,而不是待刪除節點的前一個節點,直接 head = a即可。
相關推薦
每日一刷--Leetcode
以後每10天組一篇blog 2018.9.13 Q 2018.9.14 Q7 涉及到了int在記憶體中是如何儲存的,查查資料。 計算機中所有的整型資料都是以補碼來存的(正數補碼是本身,負數補碼是原碼取反再加一)。 Java基本資料型別,byt
每日一刷-leetcode
2018.9.24 Q19 在思考了正常的流程後,需要單獨考慮一下邊界值:起始邊界等於-1、0、1,終止邊界等於len、len+1的情況,尤其是對於空不空的判斷。 本題中,正常的流程是:從頭開始數出間隔為 n 的節點(記為a,b),兩個節點一起向後移動,直到後一個節
(LeetCode每日一刷11)搜尋插入位置
題目描述: 給定一個排序陣列和一個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。 你可以假設陣列中無重複元素。 示例: 示例 1: 輸入: [1,3,5,6], 5 輸出: 2 示例 2:
(LeetCode每日一刷10)實現 strStr() 函式
題目描述: 給定一個 haystack 字串和一個 needle 字串,在 haystack 字串中找出 needle 字串出現的第一個位置 (從0開始)。如果不存在,則返回 -1。 示例: 示例 1: 輸入: haystack =
(LeetCode每日一刷09)移出元素
題目描述: 給定一個數組 nums 和一個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 元素的順序可以改變。你
(LeetCode每日一刷08)刪除排序陣列中的重複項
題目描述: 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 示例: 示例 1: 給定陣列 nums = [1
(LeetCode每日一刷07)合併兩個有序連結串列
題目描述: 將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。 示例: 輸入:1->2->4, 1->3->4 輸出:1->1->2->3->4->
(LeetCode每日一刷06)有效的括號
題目描述: 給定一個只包括 '(',')','{','}','[',']' 的字串,判斷字串是否有效。 有效字串需滿足: 左括號必須用相同型別的右括號閉合。 左括號必須以正確的順序閉合。 注意空字串可被認為是有效字串。 示例:
(LeetCode每日一刷05)最長公共字首
題目描述: 編寫一個函式來查詢字串陣列中的最長公共字首。 如果不存在公共字首,返回空字串 ""。 示例: 示例 1: 輸入: ["flower","flow","flight"] 輸出: "fl" 示例 2: 輸入: ["
(LeetCode每日一刷04)羅馬數字轉整數
題目描述: 羅馬數字包含以下七種字元: I, V, X, L,C,D 和 M。 字元 數值 I 1 V 5 X 10 L
(LeetCode每日一刷03)迴文數
題目描述: 判斷一個整數是否是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。 示例: 示例 1: 輸入: 121 輸出: true 示例 2: 輸入: -121 輸出: false 解釋: 從左向右讀, 為 -121 。
(LeetCode每日一刷02)反轉整數
題目描述: 給定一個 32 位有符號整數,將整數中的數字進行反轉。 注意: 假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−2^21, 2^31−1]。根據這個假設,如果反轉後的整數溢位,則返回 0。 示例: 示例 1:
(LeetCode每日一刷01)兩數之和
題目描述: 給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2 + 7 =
(LeetCode每日一刷18) 合併兩個有序陣列
題目描述: 給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序陣列。 說明: 初始化 nums1 和&n
(LeetCode每日一刷17) x 的平方根
題目描述: 實現 int sqrt(int x) 函式。 計算並返回 x 的平方根,其中 x 是非負整數。 由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。 示例: 示例 1: 輸入:
(LeetCode每日一刷16)二進位制求和
題目描述: 給定兩個二進位制字串,返回他們的和(用二進位制表示)。 輸入為非空字串且只包含數字 1 和 0。 示例: 示例 1: 輸入: a = "11", b = "1" 輸出: "100" 示例 2:
(LeetCode每日一刷15)加一
題目描述: 給定一個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。 最高位數字存放在陣列的首位, 陣列中每個元素只儲存一個數字。 你可以假設除了整數 0 之外,這個整數不會以零開頭。 示例: 示例 1: 輸入: [1,2,3] 輸出:
(LeetCode每日一刷14)最後一個單詞的長度
題目描述: 給定一個僅包含大小寫字母和空格 ' ' 的字串,返回其最後一個單詞的長度。 如果不存在最後一個單詞,請返回 0 。 說明:一個單詞是指由字母組成,但不包含任何空格的字串。 示例: 輸入: "Hello World" 輸出
(LeetCode每日一刷13)最大自序和
題目描述: 給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。 示例: 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子陣列 [4
(LeetCode每日一刷30) 陣列拆分 I
題目描述: 給定長度為 2n 的陣列, 你的任務是將這些數分成 n 對, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得從1 到 n 的 min(ai, bi) 總和最大。 示例: 示例