簡體   English   中英

以相反順序打印鏈接列表的遞歸方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM