以反向順序輸出單向連結串列
重要性:5
以反向順序輸出前一個任務 輸出單向連結串列 的單向連結串列。
提出兩種解法:使用迴圈和使用遞迴。
使用遞迴
遞迴邏輯在這裡有點棘手。
我們需要先輸出串列的其餘部分,然後 再輸出目前的串列
let list = {
value: 1,
next: {
value: 2,
next: {
value: 3,
next: {
value: 4,
next: null
}
}
}
};
function printReverseList(list) {
if (list.next) {
printReverseList(list.next);
}
alert(list.value);
}
printReverseList(list);
使用迴圈
迴圈變體也比直接輸出複雜一點。
沒有辦法取得我們 list
中的最後一個值。我們也無法「返回」。
因此,我們可以先以順序遍歷項目並將它們記在一個陣列中,然後再以反向順序輸出我們記住的內容
let list = {
value: 1,
next: {
value: 2,
next: {
value: 3,
next: {
value: 4,
next: null
}
}
}
};
function printReverseList(list) {
let arr = [];
let tmp = list;
while (tmp) {
arr.push(tmp.value);
tmp = tmp.next;
}
for (let i = arr.length - 1; i >= 0; i--) {
alert( arr[i] );
}
}
printReverseList(list);
請注意,遞迴解法實際上執行完全相同的工作:它遵循串列,記住巢狀呼叫鏈中的項目(在執行內容堆疊中),然後再輸出它們。