我在編寫應接受對通用單鏈表的引用並創建測試程序以在字符串列表上測試我的方法的方法時遇到問題(打印列出有序和倒序)。我已經創建了一個稱爲SinglyLinkedList的單鏈表。以相反順序打印鏈表的遞歸方法
2
A
回答
5
按順序,在調用函數之前調用輸出方法。
void print(Node n)
{
if (n != null)
{
System.out.println(n.value);
print(n.next);
}
}
對於相反,首先調用函數和輸出。
void print(Node n)
{
if (n != null)
{
print(n.next);
System.out.println(n.value);
}
}
11
那麼,如果你想到遞歸,你知道你會一遍又一遍地做某件事。在這種情況下,我們希望一遍又一遍地打印一個節點,但是我們每次都需要一個不同的節點。
我們打印的第一個節點應該是列表中的最後一個。這表明了我的一個很好的基礎案例。
void printReverse(Node node) {
if(node.next != null) { // we recurse every time unless we're on the last one
printReverse(node.next); // this says "do this to the next node first"
}
System.out.println(node.data); // we'll print out our node now
}
考慮,如果你有
1,2,3,4
你會打電話打印在它1的節點上。然後它會說「我有一個下一個節點,打印出來」。 2節點也有下一個節點,所以它依照節點3.節點3仍然有下一個節點,所以在打印之前,它依照節點4。節點4願意打印自己,因爲它沒有下一個節點。然後它返回到節點3停止的地方。現在節點3可以打印並返回到節點2停止的位置。它打印並進入節點1停止的位置。它打印並返回到主要功能。
1
我同意上面的答案100%,對於我的實現我無法得到這個沒有輔助類的工作。我的回答只是擴展上面的答案,以防其他人也會遇到編譯錯誤。
public void printReverse()
{
printReverse(head);
}
private void printReverse(GNode<T> node)
{
if (node.next != null)
{
printReverse(node.next);
}
System.out.println(node.data);
}
相關問題
- 1. 使用遞歸以相反順序打印char數組的方法?
- 2. 使用遞歸函數以相反的順序打印數組
- 3. 遞歸 - 以相反順序的數字
- 4. 如何以相反的順序打印單鏈表?
- 5. 如何以相反的順序打印鏈表?
- 6. 使用遞歸打印單向鏈表的反向方法
- 7. 以相反的順序打印arraylist
- 8. 以相反順序打印陣列
- 9. 功能打印鏈表按相反的順序
- 10. 按相反順序打印鏈表的後半部分
- 11. 反向單鏈表的遞歸方法?
- 12. 遞歸棧打印方法
- 13. 以遞歸方式打印鏈接列表C++
- 14. 以適當的時間順序遞歸打印
- 15. 打印循環鏈表遞歸
- 16. Ç - 使用遞歸打印鏈表
- 17. 遞歸打印單鏈表功課
- 18. 打印以相反的順序一個Unicode的NSString
- 19. 打印以相反的順序兩條線 - java的
- 20. 遞歸打印方法中的陣列
- 21. 如何以相反順序調用遞歸函數?
- 22. 以相反順序遞歸重命名目錄,Bash腳本
- 23. 以相反順序打印任何集合中的項目?
- 24. java代碼以相反的順序打印備用素數
- 25. 爲什麼predict_proba函數以相反的順序打印概率?
- 26. 如何以相反的順序打印這個邏輯值?
- 27. 以相反的順序打印字符串輸入
- 28. 以相反的順序打印一組單詞
- 29. 避免以相反的順序打印整數
- 30. 打印以相反的順序陣列,裝配
如果這是一個'家庭作業'問題,請給它適當的標記。這提示人們提供更多的解釋,這應該對你有所幫助! –
如果這不是一個家庭作業問題,不要這樣做。一般而言,遞歸併不是處理線性數據結構的適當技術。 – EJP
@EJP等什麼?遞歸不是使用列表的正確工具?我假設有人應該告訴Lisp人重新命名他們的語言。 – Voo