Leetcode合併兩個有序鍊錶

2021-10-04 22:30:41 字數 1142 閱讀 1589

**

public class listnode

}

listnode prehead=new listnode(0);

listnode pre=prehead;

while(l1!=null&&l2!=null){

if(l1.val寫點

用了乙個虛擬頭節點,new listnode(0)括號裡面寫啥都行,具體為什麼用虛擬頭節點,還是比較懵懂;

pre用於遍歷的時候位址的移動。合併兩條鍊錶,prehead相當於合併後,我叫這個第三條鍊錶。prehead是第三條鍊錶的頭節點,pre最終指向的是第三條鍊錶的尾巴;

為什麼return 的是頭節點的下乙個?因為下乙個才是首節點,頭節點沒有資料域,沒有位址域,要得到乙個鍊錶,必須知道這個鍊錶的首節點,首節點裡面儲存這相對應的位址和資料。煉表不像陣列,需要知道全部的資料,這也是鍊錶動態儲存的體現。

整體思路就相當於要把兩個籃子裡的東西放到第三個籃子,而第三個籃子的要求比較高,要排序。

不懂

為什麼設立虛擬頭節點,還是一知半解。

20204/20

1、又刷了一遍題,感覺對於鍊錶的儲存結構更熟悉了些。畫圖的時候通常畫乙個框,把框一分為二,其中一邊是資料,xx.val;一邊是位址xx.next。現在對於位址的儲存也更加熟悉了些。

2、第三條鍊錶的想法:建立乙個煉表不像建立陣列,要陣列容量,陣列資料;很簡單,建立鍊錶其實建立乙個頭節點也就夠了。突然覺得鍊錶有點像乙個隨性的人,遇到什麼便是什麼,而陣列更像是乙個按部就班、規矩做事的人。

3、設立頭節點的原因,為什麼設立還是無法用語言幹勁利落的表示出來。而如果沒有這個頭節點,會對這個鍊錶產生什麼影響?如果沒有,pre節點就沒有辦法賦值,也就無法遍歷鍊錶了,可否替代?用l1或者l2的首位址?那麼兩者大小又要確定。如果沒有,return的值又該怎麼確定,怎麼返回這個鍊錶的首節點?如果賦值的時候採用了l1或者l2中比較小的,首節點也能確定了。所以,這個題可不可以用l1或者l2中較小的節點充當頭節點?

4、頭節點是不含有資料域和位址域的。就第三點來看,頭節點的作用不會在輸出上體現,但是整個鍊錶離了它確實玩不轉的。

5、下次來爭取用言簡意賅的文字寫清楚。

LeetCode 合併兩個有序鍊錶

將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4輸出 1 1 2 3 4 4class solution else listnode p new head while l1 null l2 null else p p ne...

LeetCode 合併兩個有序鍊錶

將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 struct listnode mergetwolists struct listnode l1,struct listnode l2 els...

leetcode 合併兩個有序鍊錶

definition for singly linked list.public class listnode class solution if l2 null listnode retnode null listnode temnode null while l1 null l2 null el...