我有兩個遞歸解決方案「k到第一個單向鏈表的最後一個元素」的問題在Java中:尋找k到第一個單向鏈表的最後一個元素
解決方案1:
public static Node nthToLast(Node head, int k , int i){
if (head == null) return null;
Node n = nthToLast(head.next, k, i);
i = i + 1;
if (i == k) return head;
return n;
}
解決方案2:
public class IntWrapper {
public int value = 0;
}
public static Node nthToLast(Node head, int k, IntWrapper i){
if (head == null) return null;
Node n = nthToLast(head.next, k, i);
i.value = i.value + 1;
if (i.value == k) return head;
return n;
}
第一溶液返回null
,而第二個解決方案完美運作。第一個解決方案按值通過k
,而第二個解決方案將int
值包裝到一個類中並通過它。
我有兩個問題:
爲什麼沒有用Java開發的第一個解決方案?爲什麼通過每個方法調用中的局部變量
i
傳遞的值與傳遞參考版本不一樣?的
Integer
類的Java包int
,但在第一個解決方案替換int
到Integer
不能正常工作。爲什麼?
在您的第一個解決方案中,我沒有初始化 – Vorsprung
@Vorsprung我相信「我」是一個方法參數,儘管我不知道最初的調用是什麼樣的。 – aquaraga
初始調用如下所示:first solution:Node n = nthToLast(testRootNode,2,0);第二種解決方案:節點n = nthToLast(testRootNode,2,new IntWrapper()); – user2925218