var reverseList = function(head) {
function reverse(cur,pre){
if(!cur) return pre
next = cur.next
cur.next = pre
return reverse(next,head)
}
return reverse(head.next,head)
}
我嘗試了一種遞回方式來寫這個,
此代碼輸出運行不正確,此代碼有什么問題?
uj5u.com熱心網友回復:
這就是我的想法:
如果我們按照您的邏輯假設這種情況(1-> 2-> 3-> null),那么最終結果是-第一個節點在其“下一個”中具有第二個節點的地址,而第二個節點在其“下一個”中具有第一個地址'下一個'。因此,形成了一個回圈(1->2 和 2->1)。如果你想列印這樣的串列,它最終會在在線平臺中陷入無限回圈的情況。
正如 Thomas Mailund 正確指出的那樣,還需要涵蓋空串列情況。
我還建議您保持變數名稱彼此不同以避免混淆。
(例如,你在你的內部函式中使用了'next'作為變數名,它已經用于鏈表)。
考慮到這些因素,這里是您的代碼的修正作業版本:
var reverseList = function(head) {
var r = null;
function reverse(p, q) {
q.next = r;
r = q;
if (p == null) return q;
return reverse(p.next, p);
}
return (!head) ? head : reverse(head.next,head)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/452504.html
上一篇:將字串拆分為Vec<String>在字符處的最佳方法,當沒有其他字符之前沒有在Rust中進行環視時?
下一篇:分詞演算法的空間復雜度
