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