在leetcode刷題過程中發現鍊錶的題目難起來是真的難,通過幾個練習題目之後發現做關於鍊錶的題目主要兩種方式:
1) 遞迴
2) 迭代
例題:合併兩個有序鍊錶(leetcode 21)。
// 使用遞迴的話需要清楚,在何處開始遞迴,遞迴的截止條件是什麼,或者邊界條件是什麼。
code:
1class
solution 67
if(l1.val 1112
else16}
17 }
本題實際上是使用遞迴,不停的將兩個鍊錶進行擷取,而擷取的方式就是l1.next = mergetwolists();因為mergetwolists()的返回值是listnode,而l1.next已經擷取了li的節點,擷取條件是l1.val > l2.val。
鍊錶的學習
鍊錶的每乙個元素由乙個儲存元素本身的節點和乙個指向下乙個元素的引用。1.靈活的記憶體動態管理,記憶體空間不是必須連續的 2.不必在建立時就確認大小,大小可以無限的延伸下去 3.插入和刪除資料的時間複雜度低,只有o 1 訪問查詢某個節點時,需要從頭開始進行訪問 function linkedlist ...
鍊錶學習 靜態鍊錶
struct linknode 鍊錶在指定位置插入與刪除元素不需要移動元素,只需要修改指標即可,而陣列刪除與加入元素則需要移動後面的元素,鍊錶相對於陣列來講,則多了指標域空間開銷,拿到鍊錶第乙個節點就相當於拿到整個鍊錶 鍊錶的分類 靜態鍊錶,動態鍊錶 單向鍊錶,雙向鍊錶,迴圈鍊錶,單向迴圈鍊錶,雙向...
學習筆記 鍊錶 鍊錶入門
重新學習程式語言日記,2011年12月29日 09 17分 定義乙個結構體 struct linkhead,p1,p2 首先定義了乙個結構體,結構體包括指標域,資料域。這個結構體就是你鍊錶裡面的節點。每個節點都包括了資料域,指標域。有了這麼乙個結構體。肯定就需要初始化這個結構體了。寫個函式來初始化鍊...