我想在Java中遞歸地反轉單向鏈表,並從斯坦福大學的這段代碼中學到了東西。有人可以幫我把C/C++代碼翻譯成java,這樣我的recursiveReverse()仍然是一個無效的方法嗎?C/C++到Java遞歸反轉鏈接列表的翻譯
下面是來自斯坦福大學的C/C++的解決方案:
void RecursiveReverse(struct node** headRef) {
struct node* first;
struct node* rest;
if (*headRef == NULL) return;
first = *headRef;
rest = first->next;
if (rest == NULL) return;
RecursiveReverse(&rest);
first->next->next = first;
first->next = NULL;
*headRef = rest;
}
這裏是我的代碼轉換的嘗試:
public void recursiveReverse(Element<T> currElement) {
Element<T> first;
Element<T> rest;
if (currElement == null) return;
first = currElement;
rest = currElement.next;
if (rest == null) return;
recursiveReverse(rest);
first.next.next = first;
first.next = null;
head = rest;
}
我最初使用 「currElement =休息」 爲最後一行,但與此,當我開始1,2,3,空,我得到的輸出是1,空
但是在使用head = rest(鏈表的原始頭)後,我現在有2,1,null。
有人可以幫助我正確地翻譯它,所以我可以得到輸出爲3,2,1,null?任何幫助都感激不盡。
謝謝。
謝謝Joop,你的解決方案工作完美。但是,如果在每次調用元素時都不改變元素的鏈接(並重新排列它們)而不返回元素,那麼完全不可能實現這種方法嗎?如果是這樣,它是否與傳遞參考(謝謝,Dieter!)有關?我在想,因爲我們有記憶中的元素,我們可以在訪問它們後改變它們的鏈接。 – Stralo
對於反向列表,您需要返回最後一個鏈接,並且只能在遞歸調用之後完成,作爲出參數或返回值。在java中,這樣一個out參數可以作爲一個元素的數組:'void recursiveReverse(Element [] ref)'。 –