LeetCode 鍊錶相關 重新理解

2021-10-10 22:27:59 字數 1304 閱讀 6120

劍指 offer 24

反轉鍊錶

92774.3%

簡單之前用python做過了,但理解的不透徹,重新用js再做一下。

個人理解:

指標指向→乙個值,表示指標裡存放的是這個值的位址,即箭頭末尾是箭頭方向的位址,所以兩個指標相等,表示位址相同,即是同乙個節點

首先,node.next 相當於鍊錶結構中的左←右→箭頭指向(正常就是→),

其次,如果定義了乙個指標如 let cur = head(指向乙個鍊錶,相當於頭結點),那麼再宣告乙個指標let pre = cur,並不是說pre指向cur,而是指向cur指向的值,也就是說兩者都指向head,而不是指標的指標

下面程式中初始的宣告採用了解構賦值,中了中間變數儲存cur.next的值

注意這裡不用cur,直接用head來移動也可以,head本身就是頭結點(或者個人理解成指標),但有些時候不能這樣用,且為了可讀性,宣告乙個指標比較好

var reverselist = function(head) 

return pre

};

最後注釋掉的那裡的解構賦值不易於理解,且得有一定順序,不建議使用

cur.next = pre這一步就是將→指向←,即斷開原鍊錶,成為兩個鍊錶

排序鍊錶

72467.9%

中等指標的val就是所指向結點的val,那麼修改cur.val相當於修改了鍊錶這個結點的val

var sortlist = function(head) 

arr.sort((a,b) => a-b);

// let temp = new listnode(0);

p = head

for(let i = 0; i < arr.length; i++)

return head

};

兩數相加

4252

39.0%

中等這道題思路很簡單,就是將傳統的加法式子變成 左側對齊,從左邊開始加,向右進製。

但要除錯挺久,比如兩個鍊錶長度不一致的情況,還有最後一位進製的話,還有再給個val == 1的結點。

我的解法沒有修改原鍊錶,而是生成個新鍊錶,並把l1和l2的結點的值給了n1,n2,也方便理解。

合理運用三元表示式很重要。

var addtwonumbers = function(l1, l2) 

if(carry == 1) node.next = new listnode(1)

return dummy.next

};

leetcode鍊錶相關經典習題

141.給定乙個鍊錶,判斷鍊錶中是否有環。public class solution listnode fast head listnode slow head while fast null fast.next null return false 142.給定乙個鍊錶,返回鍊錶中第乙個入環的節點,...

LeetCode鍊錶相關問題總結

獲取鍊錶的長度 兩種方法 listnode frist head int length 0 先獲得鍊錶的長度 while frist null 或者 listnode frist head int length 1 先獲得鍊錶的長度 while frist.next null 區別就是使用第二種方法...

LeetCode 鍊錶相關題目總結

之前已經對鍊錶相關常用操作進行了總結。在這裡,對 leetcode 與鍊錶相關的題目解答思路進行總結。1.兩個鍊錶,求是否有相交的節點並返回 方案一 將兩個鍊錶的各節點依次存入兩個物件中,然後雙層迴圈查詢是否存在有相同的節點 方案二 先求出兩個鍊錶各自長度,將長鍊錶先向尾部移動至和短鍊錶同樣長度的位...