![](/img/trans.png)
[英]Javascript value isn't being passed while using helper function
[英]My solution to a LeetCode problem works fine, until I try to improve it by using a helper function. The argument isn't being returned
嘿,提前感謝您的幫助!
所以我在嘗試解決 LeetCode 問題時似乎在實現輔助函數時遇到了問題。 我已經找到了一個可行的解決方案,但是當我嘗試在輔助函數中包裝重復的邏輯時,似乎沒有返回參數。
問題是合並兩個排序的鏈表並將其作為新的排序列表返回。 應該通過將前兩個列表的節點拼接在一起來制作新列表。 這是 LC 上問題的鏈接: https : //leetcode.com/problems/merge-two-sorted-lists/
這是我的工作解決方案:
var mergeTwoLists = function(l1, l2) {
let dummyHead = new ListNode(0),
q = l1,
v = l2,
curr = dummyHead;
while (q !== null || v !== null) {
if (q && v) {
if ( q.val !== null && v.val !== null) {
if (q.val <= v.val) {
curr.next = new ListNode(q.val);
curr = curr.next;
q = q.next;
} else {
curr.next = new ListNode(v.val);
curr = curr.next;
v = v.next;
}
} else if (q.val !== null) {
curr.next = new ListNode(q.val);
curr = curr.next;
q = q.next;
} else {
curr.next = new ListNode(v.val);
curr = curr.next;
v = v.next;
}
} else if (q) {
curr.next = new ListNode(q.val);
curr = curr.next;
q = q.next;
} else {
curr.next = new ListNode(v.val);
curr = curr.next;
v = v.next;
}
}
return dummyHead.next;
};
如您所見,在我的解決方案中多次重復相同的步驟。 一旦我嘗試使用輔助函數處理它,似乎返回的參數curr
存在問題。 每次函數由算法運行時,它總是顯得新鮮。
我確定我遺漏了一些明顯的東西。 任何幫助將不勝感激:) 這是使用輔助函數實現的解決方案:
var mergeTwoLists = function(l1, l2) {
let dummyHead = new ListNode(0),
q = l1,
v = l2,
curr = dummyHead;
while (q !== null || v !== null) {
if (q && v) {
if ( q.val !== null && v.val !== null) {
if (q.val <= v.val) {
attachNode(curr, q);
} else {
attachNode(curr, v);
}
} else if (q.val !== null) {
attachNode(curr, q);
} else {
attachNode(curr, v);
}
} else if (q) {
attachNode(curr, q);
} else {
attachNode(curr, v);
}
}
return dummyHead.next;
};
function attachNode(curr, value) {
curr.next = new ListNode(value.val);
curr = curr.next;
value = value.next;
return curr;
}
你在函數作用域上犯了一個錯誤。 如果你有這樣的功能
function f(arg) {
arg = 'another value';
}
那么調用范圍內的arg
不會改變。 參數arg
是調用范圍內參數的副本,其值不會改變調用范圍內的參數:
let arg = 'some value';
f(arg);
arg === 'some value'; // this is true
看起來您在某種程度上正在考慮這一點,因為您從函數返回cur
但您沒有將值分配給任何東西。
我們不必將value
設置為value.next
因為列表已經排序;
在Linked List 中,只需跟蹤鏈接並連接它們就足夠了:
const mergeTwoLists = function(l1, l2) {
if (l1 === null) {
return l2;
}
if (l2 === null) {
return l1;
}
if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2)
return l1;
} else {
l2.next = mergeTwoLists(l1, l2.next)
return l2;
}
}
const mergeTwoLists = function(l1, l2) {
const sentinel = {
val: -1,
next: null
};
let head = sentinel;
while (l1 && l2) {
if (l1.val > l2.val) {
head.next = l2;
l2 = l2.next;
} else {
head.next = l1;
l1 = l1.next;
}
head = head.next;
}
head.next = l1 || l2;
return sentinel.next;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.