[英]Recursive method that prints a linked list in reverse order
我在編寫一個方法時遇到問題,該方法應該接受對通用單鏈表的引用,並創建一個測試程序來在字符串列表上測試我的方法(按順序和反向順序打印列表)。 我已經創建了一個名為SinglyLinkedList的單鏈表。
好吧,如果你考慮遞歸,你知道你會一遍又一遍地做一些事情。 在這種情況下,我們想要反復打印一個節點,但我們每次都想要一個不同的節點。
我們打印的第一個節點應該是列表中的最后一個節點。 這對我來說是一個很好的基礎案例。
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
您將在節點上調用print,其中包含1。 然后會說“我有一個下一個節點,打印出來”。 2節點還具有下一個節點,因此它遵循節點3.節點3仍然具有下一個節點,因此在打印之前它將延遲到節點4。 節點4願意打印自己,因為它沒有下一個節點。 然后它返回到節點3停止的位置。 現在節點3可以打印並返回到節點2停止的位置。 它打印並轉到節點1停止的位置。 它打印並返回主函數。
對於有序,在重新調用函數之前調用輸出方法。
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);
}
}
我同意100%的上述答案,對於我的實現,如果沒有幫助類,我無法使用它。 我的答案只是擴展上面的答案,以防其他人也遇到編譯錯誤。
public void printReverse()
{
printReverse(head);
}
private void printReverse(GNode<T> node)
{
if (node.next != null)
{
printReverse(node.next);
}
System.out.println(node.data);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.