我有两个准备好的类,一个用于'List'(链表)和一个用于'ListNode',他们要求我(用于家庭作业)为'List'类创建递归'showRev'方法,该类使用另一个ListNode类的'showRev'方法......
这个方法应该做的是显示列表,但从结尾开始,与show相反。
所以我需要两种方法,但是'List'会使用'ListNode'。
这是我的代码:
public class List {
private ListNode firstNode;
private ListNode lastNode;
private String name;
public List()
{
this("list");
}
public List(String listName)
{
name=listName;
firstNode=lastNode=null;
}
.
.
.
.//there are more methods here
.
.
.
public void showRev()
{
//what do you suggest?
}
这是ListNode类:
public class ListNode {
Object data;
ListNode nextNode;
public ListNode(Object o)
{
this(o,null);
}
public ListNode(Object o,ListNode node)
{
data=o;
nextNode=node;
}
public Object getObject()
{
return data;
}
public ListNode getNext()
{
return nextNode;
}
public void show ()
{
System.out.println(this.getObject());
if (this.nextNode != null) {
this.nextNode.show();
}
}
public void showRev ()
{
// what do you suggest?
}
}
答案 0 :(得分:0)
由于这是作业,我不会给你一个答案,而是给你一些可以引导你回答的想法。
如果要解决递归问题,可以将问题分解为同一问题的一个或多个较小实例。
在这种情况下,您有List
。您可以将其分解为第一个节点"和"列表的其余部分"。 "列表的其余部分"是同一问题的较小实例。
如果您的问题是以相反的顺序显示List
,并且您已经有了一种神奇的方式来显示"列表的其余部分"以相反的顺序,你怎么能解决这个问题?这需要一点思考。如果你遇到困难,试着考虑只有两三个元素的列表。
如果你能搞清楚,那么你有答案。 "魔术方式"显示列表的其余部分将是递归调用。然后您需要做的就是找出何时停止("基本情况"):您希望该方法在什么时候停止以递归方式调用自身?
答案 1 :(得分:0)
你可以让你的方法做这样的事情来通过递归打印反向列表。
public void showRev(ListNode node)
{
if (node != null) {
showRev(node.nextNode);
System.out.println(node.data);
};
}